DFS——wyh的迷宫
作者:互联网
DFS——wyh的迷宫
题目描述
给你一个n*m的迷宫,这个迷宫中有以下几个标识:
s代表起点
t代表终点
x代表障碍物
.代表空地
现在你们涵哥想知道能不能从起点走到终点不碰到障碍物(只能上下左右进行移动,并且不能移动到已经移动过的点)。
输入描述:
输入第一行一个整数T(1<=T<=10)
接下来有T组测试数据,对于每一组测试数据,第一行输入2个数n和m(1<=n,m<=500)
接下来n行,每行m个字符代表这个迷宫,每个字符都是上面4个中的一种
数据保证只有一个起点和一个终点
输出描述:
对于每一组测试数据,如果可以的话输出YES,不可以的话输出NO
示例
输入
1
3 5
s…x
x…x
…tx
输出
YES
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
char f[1000][1000];
int x[4]={1,-1,0,0},y[4]={0,0,1,-1};
int n,m;
int dfs(int a,int b)
{
int aa,bb,flag=0;
if(f[a][b]=='t'){
return 1;
}
else{
for(int i=0;i<4;i++){
aa=a+x[i];
bb=b+y[i];
if(f[aa][bb]!='x'&&aa>=0&&aa<n&&bb>=0&&bb<m){
f[a][b]='x';
flag=dfs(aa,bb);
if(flag==1){
return 1;
}
else{
continue;
}
}
}
}
return 0;
}
int main()
{
int t,a,b;
cin>>t;
while(t--){
cin>>n>>m;
getchar();
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>f[i][j];
if(f[i][j]=='s'){
a=i;
b=j;
}
}
}
if(dfs(a,b)){
cout<<"YES"<<endl;
}
else{
cout<<"NO"<<endl;
}
}
return 0;
}
linjiayina
发布了98 篇原创文章 · 获赞 3 · 访问量 4659
私信
关注
标签:输出,int,迷宫,测试数据,DFS,include,输入,wyh 来源: https://blog.csdn.net/linjiayina/article/details/104101535