高桥先生住的小区是长方形的,被划分成一个个格子。高桥先生想从家里去鱼店,高桥先生每次可以走到他前后左右四个格子中的其中一个,但不能斜着走,也不能走出小区
现在给出地图:
s
:代表高桥先生的家
g
:代表鱼店
.
:代表道路
#
:代表墙壁
高桥先生不能穿过墙壁。
输入:第一行输入n(1<=n<=500),m(1<=m<=500)代表小区的长和宽,接下来n行每行m个字符,描述小区中的每个格子。
输出:如果高桥先生能到达鱼店,输出"Yes",否则输出"No"。
#include <iostream>
using namespace std;
const int N=1000;
char g[N][N];
bool check,stu[N][N];
int n,m;
int x1,y1;
void dfs(int x,int y)
{
int dx[4]={0,1,0,-1};
int dy[4]={-1,0,1,0};
for(int i=0;i<4;i++)
{
int nx=x+dx[i],ny=y+dy[i];
if(nx>=0&&ny>=0&&nx<n&&ny<m&&g[nx][ny]!='#')
{
if(g[nx][ny]=='g')
{check=true;return;}
else {
g[nx][ny]='#';
dfs(nx,ny);
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
in>>g[i][j];
if(g[i][j]=='s')
{x1=i;y1=j;}
}
}
dfs(x1,y1);
if(check) cout<<"Yes";
else cout<<"No";
return 0;
}