首页 > 其他 > 详细

蛇形填数

时间:2015-09-24 01:59:20      阅读:158      评论:0      收藏:0      [点我收藏+]

今天在笔试遇到的题。

在n*n的矩阵里填入1,2,...,n*n,要求填成蛇形。例如n=4时矩阵为:
10 11 12 1
9   16 13 2
8   15 14 3
7    6   5  4

 

一般思路

1)0初始化一个二位数组

2)从右上角开始往下走,直到某节点的下面节点不是 0 或者越界(判断条件),就往左走,然后往上走,往右走

3)重复操作,直到数组没有0

 1 #include <stdio.h>
 2 int k=1;//用来累加到数组
 3 int qn;
 4 void fun(int (*a)[qn],int x,int y,int n)
 5 {
 6     if(a[x][y]!=0)
 7         return;
 8     while(a[x][y]==0)
 9     {
10         a[x][y]=k++;
11         if(x+1==n||a[x+1][y]!=0)
12         {
13             y--;
14             break;
15             
16         }
17         x++;
18     }
19     while(a[x][y]==0)
20     {
21         a[x][y]=k++;
22         if(y-1==-1||a[x][y-1]!=0)
23         {
24             x--;
25             break;
26             
27         }
28         y--;
29     }
30 
31     while(a[x][y]==0)
32     {
33         a[x][y]=k++;
34         if(x-1==-1||a[x-1][y]!=0)
35         {
36             y++;
37             break;
38             
39         }
40         x--;
41     }
42 
43     while(a[x][y]==0)
44     {
45         a[x][y]=k++;
46         if(y+1==n||a[x][y+1]!=0)
47         {
48             x++;
49             break;
50             
51         }
52         y++;
53     }
54 
55     fun(a,x,y,--n);
56     return ;
57         
58     
59 }
60 
61 int main()
62 {
63     int n;
64     scanf("%d",&n);
65     qn=n;
66     int a[n][n];
67     for(int i=0;i<n;i++)
68     for(int j=0;j<n;j++)
69         a[i][j]=0;
70     fun(a,0,n-1,n);
71     for(int i=0;i<n;i++)
72     for(int j=0;j<n;j++)
73     {
74         
75         printf("%d ",a[i][j]);
76         if(j==n-1)
77             printf("\n");
78     }
79 }

换个思路:

其实这是个4-联通问题

蛇形填数

原文:http://www.cnblogs.com/firstcxj/p/4834052.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!