#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int p[210][210];
int n,m;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>p[i][j];
}
}
int x=1,y=1,d=0;
int dx[]={1,0,-1,0},dy[]={0,1,0,-1};
// mm[{1,1}]++;
for(int i=1;i<=n*m;i++)
{
cout<<p[x][y]<<' ';
p[x][y]=-1;
//mm[p[x][y]]++;
int a=x+dx[d];
int b=y+dy[d];
if(a<1||a>=n+1||b<1||b>=m+1||p[a][b]==-1)
{
if(b==m+1) b=m;
d=(d+1)%4;
a=x+dx[d];
b=y+dy[d];
}
x=a,y=b;
}
return 0;
}
问题描述:回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。