计蒜客 T1595 迷宫(一)题解

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;
}

如果没看懂也可以借鉴大佬的题解哦.(本人觉得写的很好)
'五岁就很帅’的博客
蒟蒻第一次写题解,如有不对,大佬误喷,谢谢.

你可能感兴趣的:(题解,蒟蒻,dfs,c语言)