How to print all square submatrices of square matrix in C?

11,863

Your code was just printing a single sub-matrix for each size, positioned in the upper-left corner of the matrix. You need to add i and j offsets to get the sub-matrices at all positions:

#include <stdio.h>

int main() {
    int mtrx_size = 8;
    int mat[8][8] = {
        { 1, 2, 3, 4, 5, 6, 7, 8},
        { 9,10,11,12,13,14,15,16},
        {17,18,19,20,21,22,23,24},
        {25,26,27,28,29,30,31,32},
        {33,34,35,36,37,38,39,40},
        {41,42,43,44,45,46,47,48},
        {49,50,51,52,53,54,55,56},
        {57,58,59,60,61,62,63,64}
    };

    int i, j, ioff, joff, off_cnt;
    int sub_mtrx_size;

    for(sub_mtrx_size = mtrx_size; sub_mtrx_size > 1 ; sub_mtrx_size--) {
        off_cnt = mtrx_size - sub_mtrx_size + 1;
        for (ioff = 0; ioff < off_cnt; ioff++) {
            for (joff = 0; joff < off_cnt; joff++) {
                for (i = 0; i < sub_mtrx_size; i++) {
                    for (j = 0; j < sub_mtrx_size; j++) {
                        printf("%3d ", mat[i+ioff][j+joff]);
                    }
                    printf("\n");
                }
                printf("\n");
            }
        }
    }

    return 0;
}
Share:
11,863
ata.niazov
Author by

ata.niazov

Updated on June 24, 2022

Comments

  • ata.niazov
    ata.niazov almost 2 years

    Please, help me to find and print all square submatrices of square matrix from big to small square matrices in C programming language

    I wrote code that works wrong:

    int main() {
        int mtrx_size = 8;
        int mat[8][8] = {
            { 1, 2, 3, 4, 5, 6, 7, 8},
            { 9,10,11,12,13,14,15,16},
            {17,18,19,20,21,22,23,24},
            {25,26,27,28,29,30,31,32},
            {33,34,35,36,37,38,39,40},
            {41,42,43,44,45,46,47,48},
            {49,50,51,52,53,54,55,56},
            {57,58,59,60,61,62,63,64}
        };
    
        int i,j;
        int sub_mtrx_size;
    
        for(sub_mtrx_size = mtrx_size; sub_mtrx_size > 1 ; sub_mtrx_size--)
        {
            for(i = 0; i < sub_mtrx_size; i++)
            {
                for(j = 0; j < sub_mtrx_size; j++)
                {
                    printf("%3d ", mat[i][j]);
                }
                printf("\n");
            }
            printf("\n");
    
        }
        return 0;
    

    Here I need to find all 8x8, 7x7, 6x6, 5x5, 4x4, 3x3 and 2x2 submatrices.