用dir记录一下方向,方向有讲究优先是先往下,往右,往上,最后往左。
dfs的出口就是出个个数等于矩阵个数了。
#include<bits/stdc++.h>
using namespace std;
const int N=1000;
int a[N][N];
bool st[N][N];
int n,m;
int cnt; int dxy[4][2]={
{
1,0},{
0,1},{
-1,0},{
0,-1}}; void dfs(int x,int y,int dir)
{
st[x][y]=1;
if(cnt!=n*m-1)
printf("%d ",a[x][y]);
else
printf("%d\n",a[x][y]);
cnt++;
if(cnt==n*m) return ;
int tx=dxy[dir][0]+x;
int ty=dxy[dir][1]+y; while(tx<=0||ty<=0||tx>n||ty>m||st[tx][ty])
{
dir++;
if(dir>=4) dir=0;
tx=dxy[dir][0]+x;
ty=dxy[dir][1]+y;
}
dfs(tx,ty,dir);
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
dfs(1,1,0);
}