AcWing 3208-csp. Z字形扫描
原题链接
简单
作者:
YAX_AC
,
2024-11-14 17:43:59
,
所有人可见
,
阅读 2
#include<iostream>
using namespace std;
const int N = 510;
int a[N][N],n;
int dx[] = {0,1,1,-1},dy[]={1,-1,0,1}; //向右,向左下,向下,向右上
int main()
{
cin>>n;
for(int i = 0; i<n; i++)
for(int j = 0; j<n; j++)
cin>>a[i][j];
int i = 0,j = 0,cnt = 0,t = 0;
cout<<a[0][0]<<" ";
cnt++;//走过的格子数量
while(cnt<n*n)
{
int x = i + dx[t], y= j + dy[t];
//未遍历过,未越界
if(a[x][y] && x>=0 && x<n && y>=0 && y<n)
{
i = x,j = y;
cout<<a[x][y]<<' ';
a[i][j] = 0;//标记为,已经走过
cnt++;
if(t==0 || t==2) t++;//向右和向下走一步就要变向
}
else t = (t+1)%4;//遍历过或者越界就需要转向
}
return 0;
}