#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
char G[102][102];
int n,m,dis[102][102];
struct NODE{ int x,y; };
queue<NODE> Q;
void bfs(int Sx,int Sy)
{
memset(dis,-1,sizeof(dis));
NODE S; S.x=Sx; S.y=Sy;
Q.push(S);
dis[S.x][S.y]=0;
while(Q.empty()==false&&dis[n][m]<0)
{
NODE u=Q.front(); Q.pop();
for(int k=0;k<4;k++)
{
int nx=u.x+dx[k],ny=u.y+dy[k];
if(nx<1||nx>n||ny<1||ny>m) continue; // 判越界
if(G[nx][ny]=='.'&&dis[nx][ny]<0)
{
NODE v; v.x=nx; v.y=ny;
Q.push(v);
dis[v.x][v.y]=dis[u.x][u.y]+1;
if(v.x==n&&v.y==m) break;
}
}
// if(dis[n][m]==true) break;
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>G[i][j];
bfs(1,1); // 出发!
if(dis[n][m]>=0) cout << "Yes" << endl;
else cout << "No" <<endl;
return 0;
}
广搜-迷宫寻路
最新推荐文章于 2024-10-17 11:39:06 发布