Print a matrix in counter-clockwise spiral form

C program to print a matrix in counter-clockwise spiral form.

Program

#include<stdio.h>
#include<conio.h>
#define MAX 10

void read_matrix(int mat[MAX][MAX], int row, int col)
{
    int i, j;
    for(i=0;i<row;i++)
    {
        for(j=0;j<col;j++)
        {
            printf("Element [%d][%d]\t:",i,j);
            scanf("%d",&mat[i][j]);
        }
    }
}

void print_matrix(int mat[MAX][MAX], int row, int col)
{
    int i, j;
    for(i=0;i<row;i++)
    {
        for(j=0;j<col;j++)
        {
            printf("%d\t",mat[i][j]);
        }
        printf("\n");
    }
}

void print_counterclock_spiral(int mat[MAX][MAX], int row, int col)
{
    int left, right, top, bottom, count, total, i;

    left = 0;
    right = col-1;
    top = 0;
    bottom = row-1;
    total = row * col;
    count = 0;

    while(left <= right && top <= bottom)
    {
        if(count == total)
            break;

        for(i=top;i<=bottom;i++)
        {
            printf("%d  ",mat[i][left]);
            count++;
        }
        left++;

        if(count == total)
            break;

        for(i=left;i<=right;i++)
        {
            printf("%d  ",mat[bottom][i]);
            count++;
        }
        bottom--;

        if(count == total)
            break;

        if(top <= bottom)
        {
            for(i=bottom;i>=top;i--)
            {
                printf("%d  ",mat[i][right]);
                count++;
            }
            right--;
        }

        if(count == total)
            break;

        if(left <= right)
        {
            for(i=right;i>=left;i--)
            {
                printf("%d  ",mat[top][i]);
                count++;
            }
            top++;
        }
    }
}

void main()
{
    int mat[MAX][MAX];
    int row, col;

    printf("Enter the number of rows\t:");
    scanf("%d",&row);
    printf("Enter the number of columns\t:");
    scanf("%d",&col);

    printf("Enter the elements of the matrix\n");
    read_matrix(mat, row, col);

    printf("\nMatrix entered is\n");
    print_matrix(mat, row, col);

    printf("\nMatrix in spiral form is \n");
    print_counterclock_spiral(mat, row, col);

    getch();
}

Output

Enter the number of rows        :5
Enter the number of columns     :5
Enter the elements of the matrix
Element [0][0]  :1
Element [0][1]  :2
Element [0][2]  :3
Element [0][3]  :4
Element [0][4]  :5
Element [1][0]  :6
Element [1][1]  :7
Element [1][2]  :8
Element [1][3]  :9
Element [1][4]  :10
Element [2][0]  :11
Element [2][1]  :12
Element [2][2]  :13
Element [2][3]  :14
Element [2][4]  :15
Element [3][0]  :16
Element [3][1]  :17
Element [3][2]  :18
Element [3][3]  :19
Element [3][4]  :20
Element [4][0]  :21
Element [4][1]  :22
Element [4][2]  :23
Element [4][3]  :24
Element [4][4]  :25

Matrix entered is
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

Matrix in spiral form is
1  6  11  16  21  22  23  24  25  20  15  10  5  4  3  2  7  12  17  18  19  14  9  8  13