一个方法玩转螺旋矩阵

一个方法玩转螺旋矩阵

一个方法玩转螺旋矩阵
9*9螺旋矩阵

 1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 int main(void)
  5 {
  6     int N=81,m=9,n=9;
  7     int i,j,level,t=0;
  8     int a[N],b[n][m];
  9     for(i = 0 ;i < N;i++){
 10         a[i] = i;
 11     }
 12     level = m/2 + m%2;
 13     for(i = 0;i < level;i++){
 14         for(j = i;j <= n-1-i && t<=N-1;j++){
 15             b[i][j] = a[t++];
 16         }
 17         for(j=i+1;j<=m-2-i && t<=N-1;j++){
 18             b[j][n-1-i] = a[t++];
 19         }
 20         for(j = n-1-i;j>=i && t<=N-1;j--){
 21             b[m-1-i][j] = a[t++];
 22         }
 23         for(j = m-2-i;j>=i+1 && t<=N-1;j--){
 24             b[j][i] = a[t++];
 25         }
 26     }
 27     for(i = 0;i < m;i++){
 28         for(j = 0;j < n;j++){
 29             printf("%4d",b[i][j]);
 30         }
 31         printf("\n");
 32     }
 33     return 0;
 34 }

运行的结果 为:

[email protected]:spiral_matrix$ vim spiral_matrix.c
[email protected]:spiral_matrix$ gcc -g spiral_matrix.c
[email protected]:spiral_matrix$ ./a.out
0 1 2 3 4 5 6 7 8
31 32 33 34 35 36 37 38 9
30 55 56 57 58 59 60 39 10
29 54 71 72 73 74 61 40 11
28 53 70 79 80 75 62 41 12
27 52 69 78 77 76 63 42 13
26 51 68 67 66 65 64 43 14
25 50 49 48 47 46 45 44 15
24 23 22 21 20 19 18 17 16

代码讲解:
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main(void)
5 {
6 int N=81,m=9,n=9;//定义矩阵的大小,N为个数,m为行,n为列
7 int i,j,level,t=0;//定义循环数量,i和j,以及圈数level,t为值
8 int a[N],b[n][m];//定义数据数组a,和二维矩阵b
9 for(i = 0 ;i < N;i++){ //给数据数组赋值,如果要反的,赋值的时候就反着赋值就可以
10 a[i] = i;
11 }
12 level = m/2 + m%2;//计算圈数的大小
13 for(i = 0;i < level;i++){//第一个for控制圈数大小
14 for(j = i;j <= n-1-i && t<=N-1;j++){ //上
15 b[i][j] = a[t++];
16 }
17 for(j=i+1;j<=m-2-i && t<=N-1;j++){ //右m-2是因为上面已经少了一个,外加数组是从0开始计数,所以又减一,下面的也一样
18 b[j][n-1-i] = a[t++];
19 }
20 for(j = n-1-i;j>=i && t<=N-1;j–){ //左
21 b[m-1-i][j] = a[t++];
22 }
23 for(j = m-2-i;j>=i+1 && t<=N-1;j–){ //下 j>=i+1是因为上面占了一个了
24 b[j][i] = a[t++];
25 }
26 }
//打印螺旋矩阵
27 for(i = 0;i < m;i++){
28 for(j = 0;j < n;j++){
29 printf("%4d",b[i][j]);
30 }
31 printf("\n");
32 }
33 return 0;
34 }
9*9螺旋矩阵
反向螺旋
[email protected]:spiral_matrix$ cat spiral_matrix.c
#include <stdio.h>
#include <stdlib.h>

int main(void)
{	
	int N=81,m=9,n=9;
	int i,j=0,level,t=0;
	int a[N],b[n][m];
	for(i = N-1 ;i >=0;i--){
		a[i] = j++;
	}
	level = m/2 + m%2;
	for(i = 0;i < level;i++){
		for(j = i;j <= n-1-i && t<=N-1;j++){
			b[i][j] = a[t++];
		}
		for(j=i+1;j<=m-2-i && t<=N-1;j++){
			b[j][n-1-i] = a[t++];
		}
		for(j = n-1-i;j>=i && t<=N-1;j--){
			b[m-1-i][j] = a[t++];
		}
		for(j = m-2-i;j>=i+1 && t<=N-1;j--){
			b[j][i] = a[t++];
		}
	}
	for(i = 0;i < m;i++){
		for(j = 0;j < n;j++){
			printf("%4d",b[i][j]);
		}
		printf("\n");
	}
	return 0;
}

[email protected]:spiral_matrix$ ./a.out
80 79 78 77 76 75 74 73 72
49 48 47 46 45 44 43 42 71
50 25 24 23 22 21 20 41 70
51 26 9 8 7 6 19 40 69
52 27 10 1 0 5 18 39 68
53 28 11 2 3 4 17 38 67
54 29 12 13 14 15 16 37 66
55 30 31 32 33 34 35 36 65
56 57 58 59 60 61 62 63 64
[email protected]:spiral_matrix$

4*3螺旋矩阵

[email protected]:spiral_matrix$ ./a.out 
  11  10   9
   2   1   8
   3   0   7
   4   5   6
[email protected]:spiral_matrix$ cat spiral_matrix.c 
#include <stdio.h>
#include <stdlib.h>

int main(void)
{	
	int N=12,m=4,n=3;
	int i,j=0,level,t=0;
	int a[N],b[n][m];
	for(i = N-1 ;i >=0;i--){
		a[i] = j++;
	}
	level = m/2 + m%2;
	for(i = 0;i < level;i++){
		for(j = i;j <= n-1-i && t<=N-1;j++){
			b[i][j] = a[t++];
		}
		for(j=i+1;j<=m-2-i && t<=N-1;j++){
			b[j][n-1-i] = a[t++];
		}
		for(j = n-1-i;j>=i && t<=N-1;j--){
			b[m-1-i][j] = a[t++];
		}
		for(j = m-2-i;j>=i+1 && t<=N-1;j--){
			b[j][i] = a[t++];
		}
	}
	for(i = 0;i < m;i++){
		for(j = 0;j < n;j++){
			printf("%4d",b[i][j]);
		}
		printf("\n");
	}
	return 0;
}
[email protected]:spiral_matrix$