由里向外的螺旋矩阵

输出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

输出:

posted @ 2014-07-20 18:23  一夏鸣蝉  阅读(772)  评论(0编辑  收藏  举报