bfs走出迷宫
题目:
https://ac.nowcoder.com/acm/problem/14572、
如果能从起点走到终点就可以,用vis来记录是否走过
如果这个地点是'.'或‘E'就是可以走的
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
char a[507][507];
int vis[507][507];
int n,m;
int dx[5]={0,0,1,-1};
int dy[5]={1,-1,0,0};
int main()
{ queue<int> q;
int sx,sy,ex,ey;
while(scanf("%d %d",&n,&m)!=EOF)
{
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
scanf(" %1c",&a[i][j]);
if(a[i][j]=='S')
{
sx=i;
sy=j;
}
if(a[i][j]=='E')
{
ex=i;
ey=j;
}
}
}
q.push(sx*m+sy);
vis[sx][sy]=1;
while(!q.empty())
{
int t=q.front();
q.pop();
int x=t/m;
int y=t%m;
int tx,ty;
for(int i=0;i<4;i++)
{
tx=x+dx[i];
ty=y+dy[i];
if(!vis[tx][ty]&&(a[tx][ty]=='.'||a[tx][ty]=='E')&&tx>=0&&tx<n&&ty>=0&&ty<m)
{ q.push(tx*m+ty);
vis[tx][ty]=1;
}
}
}
if(vis[ex][ey]==1)
printf("Yes\n");
else
printf("No\n");
}
}
浙公网安备 33010602011771号