better_Z @ 2023-05-15 21:51:55
#include<iostream>
#include<cstring>
#include<queue>
#include<cstdio>
#define maxn 33
using namespace std;
int a[maxn][maxn];
int py[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
bool fh=true;
struct crood{
int x,y;
};
int main(){
int n,sx,sy;
cin>>n;
memset(a,1,sizeof(a));
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=n&&fh==true;i++){
for(int j=1;j<=n&&fh==true;j++){
if(a[i][j]==1&&a[i][j+1]==0){
sx=i,sy=j;
fh=false;//找到目标值停止循环
}
}
}
queue<crood> Q;
crood u={sx,sy};
Q.push(u);
while(!Q.empty()){
crood u=Q.front();
int dx=u.x,dy=u.y;
Q.pop();
for(int i=1;i<=4;i++){
int fx=dx+py[i][0],fy=dy+py[i][1];
if(fx<1||fx>n||fy<1||fy>n||a[fx][fy]!=0)continue;
a[fx][fy]=2;
crood f={fx,fy};
Q.push(f);
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
printf("%-5d",a[i][j]);
}
puts("");
}
return 0;
}
by lxuyinc @ 2023-05-15 22:38:29
for(int i=1;i<=4;i++){
...
}
应该是从0开始循环,因为您定义时:
int py[4][2]={{1,0},{0,1},{-1,0},{0,-1}};