迷宫(一)
题目描述
一天蒜头君掉进了一个迷宫里面,蒜头君想逃出去,可怜的蒜头君连迷宫是否有能逃出去的路都不知道。
看在蒜头君这么可怜的份上,就请聪明的你告诉蒜头君是否有可以逃出去的路。
输入格式
第一行输入两个整数 n 和m,表示这是一个n×m 的迷宫。
接下来的输入一个 n 行 m 列的迷宫。其中 ‘S’ 表示蒜头君的位置,’*‘表示墙,蒜头君无法通过,’.‘表示路,蒜头君可以通过’.'移动,'T’表示迷宫的出口(蒜头君每次只能移动到四个与他相邻的位置——上,下,左,右)。
输出格式
输出一个字符串,如果蒜头君可以逃出迷宫输出"yes",否则输出"no"。
数据范围
1≤n,m≤10。
输入样例1
3 4
S**.
…*.
***T
输出样例1
no
输入样例2
3 4
S**.
…
***T
输出样例2
yes
题目分析
dfs bfs的入门题,题目比较简单就用短点的dfs吧;按照题目输入就行
代码实现
BFS实现
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<map>
#include<set>
#include<string>
#include<stack>
#include<queue>
#include<vector>
#include<math.h>
using namespace std;
typedef long long int ll;
const int maxn=300;
const int inf=1e7;
int n,m;
char dt[15][15];
int vis[15][15];
int flag=0;
int dir[4][2]={{1,0},{-1,0},{0,-1},{0,1}};
bool pd(int x,int y)//判断路是否能走
{
return x>=1&&x<=n&&y>=1&&y<=m&&dt[x][y]!='*'&&vis[x][y]==0;
}
void dfs(int x,int y)
{
if(dt[x][y]=='T')//终点就退出
{
flag=1;
return ;
}
if(!pd(x,y)) return ;
vis[x][y]=1;
for(int i=0;i<4;i++)
{
int nx=x+dir[i][0];
int ny=y+dir[i][1];
dfs(nx,ny);
}
return ;
}
int main()
{
int sx,sy;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>dt[i][j];
if(dt[i][j]=='S')
{
sx=i;
sy=j;
}
}
}
dfs(sx,sy);
if(flag==1) cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
DFS实现
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=20;
int vis[maxn][maxn];
char a[maxn][maxn];
int n,m;
int sx,sy,fx,fy;
int flag;
int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
int pd(int x,int y)
{
if(x>=1&&x<=n&&y>=1&&y<=m&&vis[x][y]==0&&a[x][y]!='*')
return true;
else
return false;
}
void dfs(int x,int y)
{
if(x==fx&&y==fy)
{
flag=1;
return ;
}
else
{
for(int i=0;i<4;i++)
{
int nx=x+dir[i][0];
int ny=y+dir[i][1];
if(pd(nx,ny))
{
vis[nx][ny]=1;
dfs(nx,ny);
vis[nx][ny]=0;
}
}
}
}
int main()
{
flag=0;
memset(vis,0,sizeof(vis));
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
if(a[i][j]=='S')
{
sx=i;
sy=j;
}
if(a[i][j]=='T')
{
fx=i;
fy=j;
}
}
}
dfs(sx,sy);
if(flag)
cout<<"yes";
else
cout<<"no";
}