马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一天蒜头君掉进了一个迷宫里面,蒜头君想逃出去,可怜的蒜头君连迷宫是否有能逃出去的路都不知道。
看在蒜头君这么可怜的份上,就请聪明的你告诉蒜头君是否有可以逃出去的路。
输入格式
第一行输入两个整数
nn
n 和
mm
m,表示这是一个
n×mn \times m
n×m 的迷宫。
接下来的输入一个
nn
n 行
mm
m 列的迷宫。其中 'S' 表示蒜头君的位置,'*'表示墙,蒜头君无法通过,'.'表示路,蒜头君可以通过'.'移动,'T'表示迷宫的出口(蒜头君每次只能移动到四个与他相邻的位置——上,下,左,右)。
输出格式
输出一个字符串,如果蒜头君可以逃出迷宫输出"yes",否则输出"no"。
数据范围
1≤n,m≤101 \le n, m \le 10
1≤n,m≤10。
输出时每行末尾的多余空格,不影响答案正确性
样例输入1
复制
3 4
S**.
..*.
***T
样例输出1
复制
no
样例输入2
复制
3 4
S**.
....
***T
样例输出2
复制
yes#include<iostream>
using namespace std;
char mp[15][15];
int vis[15][15];
int m,n;
int s[4][2]={ {0,1},{-1,0},{0,-1},{1,0} };
bool in(int i,int j){
return ( 0<=i && i<m && 0<=j && j<n );
}
int dfs(int i,int j){
if( mp[i][j]=='T' ) return 1;
vis[i][j]=1;
for(int k=0;k<4;k++){
int nx=i+s[k][0]; int ny=j+s[k][1];
if( in(nx,ny) && vis[nx][ny]==0 && mp[nx][ny]!='*' )
dfs(nx,ny);
}
return 0;
}
int main(){
int x,y;
cin >> m >> n;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
cin >> mp[i][j];
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
if(mp[i][j]=='S'){
x=i; y=j;
break;
}
if( dfs(x,y) ) cout << "yes" << endl;
else cout << "no" << endl;
return 0;
}
|