DFS算法详解 ---- 走迷宫

这篇具有很好参考价值的文章主要介绍了DFS算法详解 ---- 走迷宫。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上期内容给大家带来了排列型dfs,这期给大家带来了使用dfs来进行图的遍历

首先请看题:
DFS算法详解 ---- 走迷宫,算法,深度优先

咱们在看这道题的时候 ,需要首先研究迷宫如何存,肯定是要定义一个浮点型的二维数组对吧,那么这里我给他定义一个char board[N][N],让这个二维数组存储迷宫。

接下来就是怎么走迷宫?咱们用dfs的方式通过递归走,因为dfs其实≈暴力,把所有情况都会搜索一遍,所以咱们只要想如何控制走迷宫的方向?这里咱们可以定义dx,dy数组分别表示横坐标与纵坐标的改变.....

int dx[4] = {-1,0,1,0};
int dy[4] = {0,1,0,-1};

那么就是剩下的就是dfs的步骤了,设置dfs(x,y),x代表横坐标,y代表纵坐标,于是就枚举这四种可能的情况,然后利用dfs递归搜索所有方案找到解决方案,但是因为这里有限制条件,也就是'#'是障碍,所以不能走只能走'.',所以咱们就可以在循环内部加上选择语句来限制走的方向....

for(int i = 0;i < 4;i++)
{
	//改变坐标
	int a = x + dx[i];
	int b = y + du[i];
	//限制条件,条件不成立跳过当前枚举情况
	if(a < 0||a >= n||b < 0||b >= m)    continue;
	if(board[a][b] != '.')     continue;
	if(st[a][b])    continue;
	//递归走迷宫
	st[a][b] = true;
	res++;//记录步数
	dfs(a,b);
}

那么我们就是最后套上公式编写一下就over了。

#include <bits/stdc++.h>
using namespace std;
const int N = 1000;
char board[N][N];
bool st[N][N];
int n,m;
int dx[4] = {-1,0,1,0};
int dy[4] = {0,1,0,-1};
int res = 0;
void dfs(int x,int y)
{
	for(int i = 0;i < 4;i++)
	{
		//改变坐标
		int a = x + dx[i];
		int b = y + dy[i];
		//限制条件,条件不成立跳过当前枚举情况
		if(a < 0||a >= n||b < 0||b >= m)    continue;
		if(board[a][b] != '.')     continue;
		if(st[a][b])    continue;
		//递归走迷宫
		st[a][b] = true;
		res++;//记录步数
		dfs(a,b);
	}
}
int main()
{
    cin >> n >> m;
	for(int i = 0;i < n;i++)
	{
		scanf("%s",board[i]);
	}
	for(int i = 0;i < n;i++)
	{
		for(int j = 0;j < m;j++)
		{
			if(board[i][j] == '@')//从@开始出发
			    dfs(i,j);
		}
	}
    cout << res << endl;
	return 0;
}

好了,今天的内容就到这里了,感谢收看,别忘记给三连哈。文章来源地址https://www.toymoban.com/news/detail-792943.html

到了这里,关于DFS算法详解 ---- 走迷宫的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python搜索算法】深度优先搜索(DFS)算法原理详解与应用,示例+代码

    目录 1 基本原理 2 DFS算法流程 3 时间复杂度 4 空间复杂度 5 DFS算法应用案例: 5.1 解决路径查找问题  5.2 解决图的连通性问题 5.3  拓扑排序 5.4  在树结构中进行深度遍历 深度优先搜索(DFS)是一种重要的图遍历算法,用于探索图中的节点和边。 DFS 是一种递归或栈(堆栈)

    2024年02月06日
    浏览(62)
  • DFS (深度优先搜索) 算法详解 + 模板 + 例题,这一篇就够了

    深度优先搜索算法 (Depth First Search,简称DFS):一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件,搜索将回溯到发现节点v的那条边的起始节点。整个进程反复进行直到所

    2024年02月02日
    浏览(48)
  • C语言递归+DFS(深度优先搜索算法)详解 图文并茂,手把手教你画树状图

    目录 一.标准定义 二.跳台阶(典型递归题目) 三.递归实现指数型枚举 四.递归实现排列型枚举 五.递归实现组合型枚举 六.DFS算法模板 深度优先搜索算法(Depth First Search,简称DFS): 一种用于遍历或搜索树或图的算法 。 沿着树的深度遍历树的节点, 尽可能深的搜索树的分

    2024年02月04日
    浏览(76)
  • DFS算法详解 ---- 走迷宫

    上期内容给大家带来了排列型dfs,这期给大家带来了 使用dfs来进行图的遍历 。 首先请看题: 咱们在看这道题的时候 ,需要首先研究 迷宫如何存 ,肯定是要定义一个浮点型的二维数组对吧,那么这里我给他定义一个char board[N][N],让这个二维数组存储迷宫。 接下来就是 怎么

    2024年01月16日
    浏览(40)
  • 深度优先搜索(DFS)算法

    目录 算法思想 时间复杂度和空间复杂度 算法实现 算法优缺点 应用领域 深度优先搜索(DFS)算法的思想是从图的某个起始顶点开始,沿着一条路径尽可能深入地访问图中的所有顶点,直到不能继续为止,然后返回并探索其他路径。具体而言,DFS算法使用栈数据结构来实现,

    2024年02月05日
    浏览(47)
  • 深度优先搜索(DFS)(算法笔记)

    本文内容基于《算法笔记》和官方配套练题网站“晴问算法”,是我作为小白的学习记录,如有错误还请体谅,可以留下您的宝贵意见,不胜感激。 深度优先搜索是一种枚举所有完整路径以遍历所有情况的搜索方法,总是以“深度”作为前进的。实现方式是有很多,最

    2024年02月08日
    浏览(53)
  • [算法日志]图论: 深度优先搜索(DFS)

    ​ 深度优先搜索算法是一种遍历图这种数据结构的算法策略,其中心思想是朝图节点的一个方向不断跳转,当该节点无下一个节点或所有方向都遍历完时,便回溯朝上一个节点的另一个方向继续遍历。这种搜索策略与回溯法有异曲同工之妙。 正因为和回溯法有相似之处,所

    2024年02月03日
    浏览(63)
  • 【数据结构与算法】图遍历算法 ( 深度优先搜索 DFS | 深度优先搜索和广度优先搜索 | 深度优先搜索基本思想 | 深度优先搜索算法步骤 | 深度优先搜索理论示例 )

    图 的 遍历 就是 对 图 中的 结点 进行遍历 , 遍历 结点 有如下两种策略 : 深度优先搜索 DFS 广度优先搜索 BFS \\\" 深度优先搜索 \\\" 英文名称是 Depth First Search , 简称 DFS ; DFS 基本思想 : 访问第一个邻接结点 : 从 起始点 出发 , 该 起始点 可能有 若干 邻接结点 , 访问 第一个 邻接结点

    2024年02月02日
    浏览(49)
  • 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次。(连通图与非连通图) 1、访问指定的起始顶点; 2、若当前访问的顶点的邻接顶点有未被访问的,则任选一个访问之;反之,退回到最近访问过的顶点;直到与起始顶点相通的全部顶点都访问完毕; 3、若

    2024年01月17日
    浏览(49)
  • 第一周算法训练(dfs)(深度优先搜索算法)

    dfs: 深度优先搜索算法 ,是一种用于遍历或 搜索树或图的算法 .沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被

    2024年02月20日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包