1 条题解
-
1
迭代版:
#include <bits/stdc++.h> using namespace std; int a[15][15],n; int k=1,x,y; int main() { scanf("%d",&n); a[x][y]=k; k++; while(k<=n*n){ while(y+1<n && a[x][y+1]==0){ y+=1; a[x][y]=k; k++; } while(x+1<n && a[x+1][y]==0){ x+=1; a[x][y]=k; k++; } while(y-1>=0 && a[x][y-1]==0){ y-=1; a[x][y]=k; k++; } while(x-1>=0 && a[x-1][y]==0){ x-=1; a[x][y]=k; k++; } } for(int i=0;i<n;i++){ for (int j=0;j<n;j++){ printf("%3d",a[i][j]); } printf("\n"); } return 0; }
递归版:
#include<bits/stdc++.h> using namespace std; const int N=1e4+10; int n; int mp[N][N]; void funcDFS(int x,int y,int now,char dir){ if(mp[x-1][y]!=0 && mp[x+1][y]!=0 && mp[x][y-1]!=0 && mp[x][y+1]!=0){ mp[x][y]=now; return ; } if(dir=='R' && x<=n && y<=n && mp[x][y]==0){ if(y+2>n || mp[x][y+2]!=0){ dir='D'; } mp[x][y]=now; funcDFS(x,y+1,now+1,dir); }else if(dir=='D' && x<=n && y<=n && mp[x][y]==0){ if(x+2>n || mp[x+2][y]!=0){ dir='L'; } mp[x][y]=now; funcDFS(x+1,y,now+1,dir); }else if(dir=='L' && x<=n && y<=n && mp[x][y]==0){ if(1>y-2 || mp[x][y-2]!=0){ dir='U'; } mp[x][y]=now; funcDFS(x,y-1,now+1,dir); }else if(dir=='U' && x<=n && y<=n && mp[x][y]==0){ if(1>x-2 || mp[x-2][y]!=0){ dir='R'; } mp[x][y]=now; funcDFS(x-1,y,now+1,dir); } } int main(){ scanf("%d",&n); funcDFS(1,1,1,'R'); int i=1; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ printf("%3d",mp[i][j]); } printf("\n"); } return 0; }
- 1
信息
- ID
- 740
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 2
- 已通过
- 2
- 上传者