蛇形填数
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
-
输入
- 直接输入方陈的维数,即n的值。(n<=100) 输出
- 输出结果是蛇形方陈。 样例输入
-
3
样例输出
-
7 8 1 6 9 2 5 4 3
分析:
我的方法有点蠢了,用了深搜
代码:
#include<cstdio> #include<cstring> int map[105][105]; int dir[4][2]={{1,0},{0,-1},{-1,0},{0,1}}; int n; void dfs(int x,int y,int t,int d) { if(t==n*n) return; if(x+dir[d][0]>=1&&x+dir[d][0]<=n&&y+dir[d][1]>=1&&y+dir[d][1]<=n&&!map[x+dir[d][0]][y+dir[d][1]]) { map[x+dir[d][0]][y+dir[d][1]]=t+1; dfs(x+dir[d][0],y+dir[d][1],t+1,d); } else { d=(d+1)%4; map[x+dir[d][0]][y+dir[d][1]]=t+1; dfs(x+dir[d][0],y+dir[d][1],t+1,d); } } int main() { memset(map,0,sizeof(map)); scanf("%d",&n); map[1][n]=1; dfs(1,n,1,0); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(j!=n) printf("%d ",map[i][j]); else printf("%d\n",map[i][j]); return 0; }