简单的BFS
//基本模版
queue q;
while(!q.empty)
{
if()
}
#include<bits/stdc++.h>
using namespace std;
char a[510][510];//用来储存符号
int dx[4]={0,1,-1,0},dy[4]={-1,0,0,1};//位置偏移数组
typedef pair<int,int> PII;//pair类型
int n,m;
bool bfs(int c,int b)
{
queue<PII> q;//pair类型队列
q.push({c,b});//将起点插入
while(!q.empty())//队列不空
{
PII start = q.front();//开始点
q.pop();//踢出队列,用来后续判断队列是否空
for(int i=0;i<4;i++)//遍历偏移点
{
int x=start.first+dx[i];//偏移后的横坐标
int y=start.second+dy[i];//纵坐标
if(x>=1&&x<=n&&y>=1&&y<=m)//如果没有出界
{
if(a[x][y]=='.')//如果可以走
{
a[x][y]='#';//把它变成不可以走,防止重复
q.push({x,y});//入队
}
}
if(a[x][y]=='E')return true;//如果到了终点,就结束
}
}
return false;//全部走完一遍,还没结束就是卡住了,没办法走完
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
int xx,yy;//定义起点的横纵坐标
memset(a,0,sizeof a);
for(int i=1;i<=n;i++)
{
scanf("%s",a[i]+1);
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if(a[i][j]=='S')//查询起点
{
xx=i;
yy=j;
}
}
if(bfs(1,1))cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}