今天在笔试遇到的题。
在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