二维阵列中c的螺旋矩阵

时间:2014-05-21 17:59:54

标签: c arrays matrix traversal spiral

我正在尝试为2D数组中的sipral矩阵编写一个c程序。哪个输出应该如下。我已完成矩阵输出的编码但不能做螺旋矩阵的输出。我无法在程序中发现错误。请帮忙

输出

给定矩阵:

3 6 3 8
4 7 1 9
3 8 2 7
5 2 9 8

螺旋导线的输出:

3 6 3 8 9 7 8 9 2 5 3 4 7 1 2 8

代码

#include<stdio.h>
int main()
{
   int row = 0, //top most row
     b =row-1,  // bottom  row
     col= 0,    // left most column
     r = col-1, // right column
     size = 0,
     matrix[10][10],
     i;
    int dir;

printf("\n Size of Matrix: "); // enter the size of Matrix//
scanf("%d", &size); 

printf("\n  Enter Matrix Elements: \n");  // Enter Matrix Element//
for(row=0;row<size;row++)    // looping for enter row//
{
    for(col=0;col<size;col++)  // looping for enter column//
    {
        printf("    Element [%d][%d] :", row,col); // print output of element. say  Element[1][0]=  //
        scanf("%d" , &matrix[row][col]); // input matrix element //
    }
    printf("\n");
}

printf("\n the given Matrix is :\n"); // print output of given Matrix //

    for(row=0;row<size;row++) // looping for row//
    {
        for(col=0;col<size;col++) // looping for column//
        {
            printf("%4d",matrix[row][col]); //output of matrix//
        }
        printf("\n");
    }

    printf("output of helical traverse matrix is: \n");

    while(col<=r && row<=b) //condition exist if left column<= right column && Topmost row<= bottom row.I set four direction. dir =0 for left to right , dir=1 for top to bottom, dir 2 for right to left, dir 4 for bottom to top.//
    {
        if(dir==0){
            for(i=col;i<=r;i++){

                printf("%4d",matrix[row][i]); //print out 3 6 3 8//
            }
                row++;  //increase top row .so now 2 nd row become the top most row// 
            }

        else if(dir==1){
            for(i=row;i<=b;i++){      // looping for print output 9 7 8

                printf("%4d",matrix[i][col-1]); 
            }

                r--; //decrease left column. so now 2nd column from the right becomes the right most column//

        }
        else if(dir==2)
        {
            for(i=r;i>=col;i--){ //looping for print output of 9 2 5//

                printf("%4d",matrix[b][i]);
            }

                b--; //decerase bottom row. so now 2 nd row from bottom becomes the bottom row.//

        }
        else if(dir==3)
        {
            for(i=b;i>=row;i--){ //looping for print out 3 4//

                printf("%4d",matrix[i][col]);
            }
                col++; //icrease left column. so now 2nd column from left becomes left most column//

        }
        dir=(dir+1)%4;
    }



    return 0;
}

1 个答案:

答案 0 :(得分:0)

需要重新设置变量。

r=b=size-1;
col=row=0;
dir=0;
while(col<=r && row<=b)
{
...
     printf("%4d",matrix[i][b]);//printf("%4d",matrix[i][col-1]);