zprbszpr @ 2023-07-11 15:38:22
#include<iostream>
using namespace std;
bool map[100][100],check[100][100];
struct zuobiao{
int x,y;
}q[1000];
int bx[4][2]={1,0,0,1,-1,0,0,-1};
void bfs(int x,int y,int n,int m){
int b,e,X,Y,xx,yy;
b++;
q[1].x=x;
q[1].y=y;
while(b<e){
X=q[b].x,Y=q[b].y;
check[X][Y]=1;
for(int i=0;i<4;i++){
xx=X+bx[i][0];
yy=Y+bx[0][i];
if(x>n||y>m||x<0||y<0){
continue;
}
if(map[xx][yy]&&check[xx][yy]==0){
q[e++].x=xx;
q[e].y=yy;
}
}
if(map[xx][yy]==map[n][m])
cout<<"yes";
else
cout<<"No";
}
}
int main(){
int n,m;
char a;
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a;
if(a=='.'){
map[i][j]=a;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(!check[i][j]&&map[i][j]){
bfs(i,j,n,m);
}
}
}
return 0;
}
感谢大佬
by ganll @ 2023-07-11 15:59:53
你可以试着用dfs
by xin20110426 @ 2023-07-11 16:06:28
注意细节,细节错误很多,检查要仔细
#include<iostream>
using namespace std;
bool map[1000][1000],check[1000][1000];
struct zuobiao{
int x,y;
}q[100000];
int bx[4][2]={1,0,0,1,-1,0,0,-1};
void bfs(int x,int y,int n,int m){
int b = 0,e = 1,X,Y,xx,yy;
q[1].x=x;
q[1].y=y;
while(b<e){
b++;
X=q[b].x,Y=q[b].y;
if(X == n && Y == m) {
cout<<"Yes";
return;
}
for(int i=0;i<4;i++){
xx=X+bx[i][0];
yy=Y+bx[i][1];
if(xx>n||yy>m||xx<1||yy<1){
continue;
}
if(map[xx][yy]&&check[xx][yy]==0){
q[++e].x=xx;
q[e].y=yy;
check[xx][yy]=1;
}
}
}
cout<<"No";
return;
}
int main(){
int n,m;
char a;
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a;
if(a=='.'){
map[i][j]=1;
}
}
}
bfs(1,1,n,m);
return 0;
}
by zprbszpr @ 2023-07-11 16:18:03
@xin20110426 感谢大佬