hi,大家好,我是Loony lovegood.今天突发奇想写了一篇题解
先推荐个oj
//不是做广告
计蒜客
最好的oj
洛谷
好了,废话不多说了.以下是正文.
没看题的小伙伴戳这里
T1595题目
题目主要描述
两个整数 n 和 m,表示这是一个 n×m 的迷宫。
在这个n 行 m\m 列的迷宫里,其中 ‘S’ 表示蒜头君的位置,’*‘表示墙,蒜头君无法通过,’.‘表示路,蒜头君可以通过’.'移动,'T’表示迷宫的出口(蒜头君每次只能移动到四个与他相邻的位置——上,下,左,右)
这道题需要用dfs.(这里就不多讲dfs啦)
没学过dfs的小伙伴可以戳这里.
dfs简介
#include "stdio.h"
int is_t=0;
int n,m;
char a[12][12];
int map[12][12]={0};//地图,记有没有走过
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
void dfs(int i,int j){
map[i][j]=1;
if(a[i][j]=='T'){//到达终点就返回
is_t=1;
return;
}
for(int k=0;k<4;k++)
{
int fx=dx[k]+i;
int fy=dy[k]+j;
if(fx<0 || fy<0 || fx>=n || fy>=m || map[fx][fy] || a[fx][fy]=='*'){//判断是否越界
continue;
}
dfs(fx,fy);//递归
}
}
int main(){
int x,y;
scanf("%d %d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%s",a[i]);
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(a[i][j]=='S' && map[i][j]==0){//是起始点并且没去过就记点的位置
x=i;
y=j;
}
}
}
dfs(x,y);//用记过的点'T'的坐标调用函数dfs
if(is_t==1){
printf("yes");//输出yes
}else{
printf("no");//输出no
}
return 0;
}
如果没看懂也可以借鉴大佬的题解哦.(本人觉得写的很好)
'五岁就很帅’的博客
蒟蒻第一次写题解,如有不对,大佬误喷,谢谢.