爆搜
这道题用递归直接完事
C++ 代码
#include<iostream>
#include<cstring>
using namespace std;
int dx[4]={0,1,1,-1};
int dy[4]={1,-1,0,1};
bool st[510][510];
int a[510][510];
int n;
void move(int x,int y,int k)
{
st[x][y]=true;
cout<<a[x][y]<<" ";
if(x==1&&y==1);
else if(x==1||y==1||x==n||y==n) k++;
for(int i=0;i<4;i++)
{
int tx=x+dx[(k+i)%4];
int ty=y+dy[(k+i)%4];
if(tx>=1&&ty>=1&&tx<=n&&ty<=n&&!st[tx][ty])
{
move(tx,ty,(k+i)%4);
return;
}
}
}
int main(void)
{
memset(st,true,sizeof st);
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
st[i][j]=false,cin>>a[i][j];
move(1,1,0);
}