提交时间:2024-05-05 13:47:44

运行 ID: 39734

#include<bits/stdc++.h> using namespace std; int n,m,a,s[105][105]; int dx[10]={1,0,-1,0},dy[10]={0,-1,0,1}; int fx,fy; void dfs(int x){ s[fx][fy]=x; fx+=dx[a]; fy+=dy[a]; if(s[fx/*+dx[a]*/][fy/*+dy[a]*/]==0&&fx>0&&fx<=n&&fy>0&&fy<=n){ a=a; dfs(x-1); } else{ fx-=dx[a]; fy-=dy[a]; } for(int i=0;i<4;i++){ fx+=dx[i]; fy+=dy[i]; if(s[fx/*+dx[i]*/][fy/*+dy[i]*/]==0&&fx>0&&fx<=n&&fy>0&&fy<=n){ a=i; dfs(x-1); return ; } else{ fx-=dx[i]; fy-=dy[i]; } } } int main(){ //freopen("cat.in","r",stdin); //freopen("cat.out","w",stdout); cin>>n;/**/ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ s[i][j]=0; } } fx=1; fy=n; m=n; dfs(n*n); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cout<<s[i][j]<<' '; } cout<<"\n"; } return 0; }