AcWing 756. 蛇形矩阵
原题链接
简单
作者:
hai阿卢
,
2021-02-04 16:55:50
,
所有人可见
,
阅读 294
#include<iostream>
using namespace std;
const int N=110;
int a[N][N];
int main()
{
int n,m;
cin>>n>>m;
//设置四个方向
int idx[4]={-1,0,1,0},idy[4]={0,1,0,-1};
int x=1,y=1;
int xi,yi;
//foot为步数
int foot=1;
int id=1;
//蛇头存在如果不合法则结束循环
while(x<=n&&x>=1&&y>=1&&y<=m&&a[x][y]==0)
{
a[x][y]=foot;
foot++;
//如果继续按原来的方向爬行,xi,yi是下一个位置
xi=x+idx[id%4];
yi=y+idy[id%4];
//如果下一个位置合法,则蛇头来到这个位置
if(xi<=n&&xi>=1&&yi>=1&&yi<=m&&a[xi][yi]==0)
{
x=xi;
y=yi;
}
//如果不合法,则方向顺时针变化
else
{
id++;
x=x+idx[id%4];
y=y+idy[id%4];
}
}
//打印结果
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}