Description
现在一只老鼠被困在了迷宫里!你需要判断老鼠能否走出迷宫。
老鼠只能向上下左右四个方向移动。我们认为只要老鼠走到了迷宫的边界即算走出迷宫。
Input
第一行输入两个整数 n, m (1⩽n,m⩽100) 表示迷宫地图的尺寸。
接下来输入 n 行,每行 m 个字符,表示迷宫地图。其中 M 表示老鼠的位置,* 代表墙壁,. 代表空地。
Output
如果老鼠可以走出迷宫,则输出一行 Yes,否则输出一行 No。
Sample
Input
4 4
*.**
*..*
*.M*
****
Output
Yes
#include <iostream>
#include<bits/stdc++.h>
#define ll long long
#define INF 0x3f3f3f3f
const int N = 1111;
using namespace std;
int n,m;
bool flag; //标记变量
char s[N][N]; //迷宫
bool vis[N][N]; //标记数组
int dx[]= {-1,1,0,0}; //x坐标
int dy[]= {0,0,-1,1}; //y坐标
void DFS(int x,int y) //DFS跑迷宫
{
vis[x][y]=1;
if(x==0||y==0||x==n-1||y==m-1)
{
flag=1;
return ;
}
for(int i=0;i<4;i++) //遍历四个方向,找出路
{
int xx=x+dx[i];
int yy=y+dy[i];
if(s[xx][yy]!='*'&&!vis[xx][yy]&&xx>=0&&xx<n&&yy>=0&&yy<m)
{
DFS(xx,yy);
}
}
}
int main()
{
ios::sync_with_stdio(0);
cin>>n>>m;
int u,v;
flag=0;
int i;
for(i=0;i<n;i++)
{
cin>>s[i];
for(int j=0;j<m;j++)
{
if(s[i][j]=='M')
{
u=i;
v=j;
}
}
}
DFS(u,v);
if(flag)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
return 0;
}