蛇形填数 总结

第一种:

[转载]南阳理工 <wbr>第33题 <wbr>蛇形填数

 

对于第一种填数:

我们一 1 为起始点  先判断下一个点是否越界 和 是否是空的 ,来决定是转还是填

View Code
 1 #include<stdio.h>
2
3 int a[100][100];
4
5 int main()
6 {
7 int n,i,j,t,x;
8 scanf("%d",&n);
9 t=n*n;
10 x=0;
11 i=-1;
12 j=n-1;
13 while(x<t)
14 {
15 while(i<n-1&&!a[i+1][j])a[++i][j]=++x;
16 while(j>0&&!a[i][j-1])a[i][--j]=++x;
17 while(i>0&&!a[i-1][j])a[--i][j]=++x;
18 while(j<n-1&&!a[i][j+1])a[i][++j]=++x;
19 }
20 for(i=0;i<n;++i)
21 {
22 for(j=0;j<n;++j)
23 printf("%4d",a[i][j]);
24 printf("\n");
25 }
26 scanf("%d",&n);
27 return 0;
28 }

对于第二种:

 

View Code
 1 #include<stdio.h>
2
3 int a[100][100];
4
5 int main()
6 {
7
8 int i,j,n;
9 int x=1;
10 scanf("%d",&n);
11 i=0;
12 j=0;
13 int t= n*n;
14 while(x<=t)
15 {
16 //@1
17 while(i<n && j>=0)a[i++][j--]=x++;
18 j++;
19 if(i>n-1)//填右下角时用
20 {
21 i--;
22 j++;
23 }
24 //@2
25 while(i>=0 && j<n)a[i--][j++]=x++;
26 i++;
27 if(j>n-1)//填右下角时用
28 {
29 i++;
30 j--;
31 }
32 }
33 for(i=0;i<n;++i)
34 {
35 for(j=0;j<n;++j)
36 printf("%4d",a[i][j]);
37 printf("\n");
38 }
39 scanf("%d",&n);
40 return 0;
41 }


交换@1 @2可以改变填数方向

把从x 从1开始加,和 x 从 n*n 开始减可以实现正向填和逆向填(相当于从右下角开始)

posted @ 2012-04-03 17:34  知行执行  阅读(1079)  评论(0编辑  收藏  举报