题目链接:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=510;
char g[N][N];
bool d[N][N];//定义一个标记
int dx[]={-1,0,1,0},dy[]={0,1,0,-1};
int m,n,flag;//定义全局,不然会被覆盖。
void dfs(int sx,int sy )
{
if(g[sx][sy]=='E')
{
flag=1;
//return;
}
for(int i=0;i<4;i++)
{
int x=sx+dx[i],y=sy+dy[i];
if(x>=0&&x<n&&y>=0&&y<m&&d[x][y]==0&&g[x][y]!='#')//这个地方尤为注意,不能写成g[xx][yy]=='.',如果写成了这个,会有一个点大不到,就无法达到递归
{
//cout<<x<<" "<<y<<endl;
d[x][y]=1;
dfs(x,y);
//d[x][y]=0;
}
}
}
int main(){
while(cin>>n>>m)
{
int sx,sy;
flag=0;//小细节,不为零的话就会被覆盖
memset(d,0,sizeof d);//多组数据,给他初始化一下
memset(g,0,sizeof g); //多组数据,给他初始化一下
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>g[i][j];
if(g[i][j]=='S'){sx=i,sy=j;}
//if(g[i][j]=='E'){s=i,e=j;}
}
} //这个起点不一定是在左上角
dfs(sx,sy);
if(flag==1) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}