标签:输出 int 迷宫 测试数据 DFS include 输入 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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。