AcWing 756. 蛇形矩阵 模拟法
原题链接
简单
作者:
Asukaa
,
2025-03-30 13:14:14
· 江苏
,
所有人可见
,
阅读 2
样例
#include<bits/stdc++.h>
using namespace std;
int n,m;
int f;
int ans[102][102];
bool c[102][102];
int x=1,y=1;
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
int t,k;
int main(){
cin>>n>>m;
//初始化c,ans矩阵
c[1][1]=1;
ans[1][1]=++k;
//循环条件:连续转方向不超过2次 或者也可以写成:累计走过的格子数不超过n*m(k!=n*m)
while(t<2){
f=f%4;//右下左上
int a=x+dx[f],b=y+dy[f];
if(a<1 || a>n || b<1 || b>m || c[a][b])//出界和走过的情况
{
t++;//记录连续转向次数
f++;}
else{
t=0;
c[a][b]=1;
ans[a][b]=++k;
x=a,y=b;
}
}
//输出
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cout<<ans[i][j]<<" ";
cout<<endl;
}
}