首页 > 代码库 > 由里向外的螺旋矩阵

由里向外的螺旋矩阵

输出N阶螺旋矩阵,如N=5时

17 16 15 14 13

18   5  4   3  12

19   6  1   2  11

20  7   8   9  10

21 22 23 24 25

 

思路如下:

从二维数组的第(N-1,N-1)个元素开始,分别对矩阵最外层的四条边进行赋值操作,起始值是N*N,依次递减。

 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <memory.h> 5  6 int N; 7  8 void generateSnake(int snake[N][N],int endRow,int endCell,int row,int cell,int start); 9 10 int main() {11 12     scanf("%d",&N);13     14     int snake[N][N];15     16     generateSnake(snake,0,0,N-1,N-1,N*N);17     18     return 0;19         20 }21 22 void generateSnake(int snake[N][N],int endRow,int endCell,int row,int cell,int start) {23     24     int ln = cell;25     int col = row;26     if(start > 1) {27         28         while(col >= endCell) {29             snake[ln][col] = start; 30 //        printf("(%d,%d)%d--",ln,col,snake[ln][col]);31             start--;32             col--;33         }34         col = endCell;35         ln--;36         37         while(ln >= endRow) {38             snake[ln][col] = start;39 //        printf("(%d,%d)%d**",ln,col,snake[ln][col]);40             start--;41             ln--;    42         }43         ln = endRow;44         45         col = endCell+1;46         while(col <= cell) {47             snake[ln][col] = start;48 //        printf("(%d,%d)%d^^",ln,col,snake[ln][col]);49             start--;50             col++;    51         }52         col = cell;53         ln++;54         55         while(ln < row) {56             snake[ln][col] = start;57 //        printf("(%d,%d)%d$$",ln,col,snake[ln][col]);58             start--;59             ln++;    60         }61         ln--;        62         63         generateSnake(snake,endRow+1,endCell+1,row-1,cell-1,start);64         65     }else {66         snake[(N-1)/2][(N-1)/2]=1;67         int k = 0;68         int m;69         while(k < N) {70             m=0;71             for(;m < N;m++) {72                 printf("%2d ",snake[k][m]);    73             }74             if(m==N)75                 printf("\n");76             k++;77         }78         k = 0;79         m = N-1;80         int temp = 0;81         while(k < N) {82             temp = temp + snake[k][k]+snake[m][k];83             m--;84             k++;85         }86         printf("%2d ",temp-1);87     }88 }

输入:

7

输出: