c program to print spiral of a matrix

Written by siddhartha. Posted in Basics

This is a program that will print a given matrix in spiral.. There are different types of spiral problems. This is one program which will take the array input and prints the numbers in spiral form..

Another normal way of asking this spiral program is, To print the spiral matrix with using upto a n2 natural numbers. That program we will discuss later once that program is done I will post that link here, so for now we are good to go..

Given a 2D array, print it in spiral form. See the following examples.

Input:
        1    2   3   4
        5    6   7   8
        9   10  11  12
        13  14  15  16

Output: 
1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 


Input:
        1   2   3   4  5   6
        7   8   9  10  11  12
        13  14  15 16  17  18
Output: 
1 2 3 4 5 6 12 18 17 16 15 14 13 7 8 9 10 11

Source Code

/*************************************************************************************/
/*  c program to print spiral of a matrix*/
/*  Download more programs at http://sourcecode4u.com/ */
/*************************************************************************************/
/* This code is adopted from the solution given
   @ http://effprog.blogspot.com/2011/01/spiral-printing-of-two-dimensional.html */

#include<stdio.h>

void spiralPrint(int m, int n, int a[40][40])
{
    int i, k = 0, l = 0;

    /*  k - starting row index
        m - ending row index
        l - starting column index
        n - ending column index
        i - iterator
    */

    while (k < m && l < n)
    {
        /* Print the first row from the remaining rows */
        for (i = l; i < n; ++i)
        {
            printf("%d ", a[k][i]);
        }
        k++;

        /* Print the last column from the remaining columns */
        for (i = k; i < m; ++i)
        {
            printf("%d ", a[i][n-1]);
        }
        n--;

        /* Print the last row from the remaining rows */
        if ( k < m)
        {
            for (i = n-1; i >= l; --i)
            {
                printf("%d ", a[m-1][i]);
            }
            m--;
        }

        /* Print the first column from the remaining columns */
        if (l < n)
        {
            for (i = m-1; i >= k; --i)
            {
                printf("%d ", a[i][l]);
            }
            l++;
        }
    }
}

/* Driver program to test above functions */
int main()
{
    int i,j,R,C,a[40][40];
    printf(" Enter number of rows: ");
    scanf("%d", &R);
    printf(" Enter number of cols: ");
    scanf("%d", &C);

    printf("Enter Matrix :: \n");
    for(i = 0; i< R ;i++){
        for(j = 0 ;j< C; j++){
            scanf("%d", &a[i][j]);
        }
    }

    spiralPrint(R, C, a);
    return 0;
}

Out Put

output for spiral of a matrix
BLOG COMMENTS POWERED BY DISQUS