代码随想录冲冲冲 Day49 图论Part1

图论理论基础 | 代码随想录

回顾了一下dfs和bfs本别都是什么

深度优先搜索理论基础 | 代码随想录

详细讲解了一下dfs的运作方法

其中最终要的就是dfs的三部曲 其实跟回溯的很像

1. 确认递归函数,参数

void dfs(参数)

通常我们递归的时候,我们递归搜索需要了解哪些参数,其实也可以在写递归函数的时候,发现需要什么参数,再去补充就可以。

一般情况,深搜需要 二维数组数组结构保存所有路径,需要一维数组保存单一路径,这种保存结果的数组,我们可以定义一个全局变量,避免让我们的函数参数过多。

vector<vector<int>> result; // 保存符合条件的所有路径
vector<int> path; // 起点到终点的路径
void dfs (图,目前搜索的节点)  

2. 确认终止条件 

3.处理目前搜索节点出发的路径

一般这里就是一个for循环的操作,去遍历 目前搜索节点 所能到的所有节点。

98. 所有可达路径

用一道题去简单实现了一下dfs的流程代码,看是如何记录路径的

其中包括了一些点 

1.终止条件是当我访问的点为终点后 结束并return

2.再去进行访问的时候 会有一个graph[x][i] == 1这么一个值 这是再存x和i之间是否有相连

如果有相连那么 就会把这个i放入的路径当中 

再之后再看i到终点的路径 也就是下一个dfs 完成并返回后 要进行回溯 保证能够访问上层节点的一下一个节点

3.在初始化的时候 会根据链接情况先把matrix进行标识

4.在结果打印时,分开打印来避免最后的空格

广度优先搜索理论基础 | 代码随想录

了解了bfs

相比起dfs,bfs是从一个点向外一层一层的去遍历

通常dfs回去解决两个点之间的最短路径问题。

因为广搜是从起点出发,以起始点为中心一圈一圈进行搜索,一旦遇到终点,记录之前走过的节点就是一条最短路径

以队列为例子 

首先再定义一个队列 然后放入起始节点

并且进行标记显示为已访问过了

接下来通过不断地获取队列的元素去看当前这个元素再各个方向上的下一个节点是什么

如果说超出了map就结束 如果到了一个没有被访问到的节点 就把这个节点放进队列中

并标记已访问 在这个情况下当while loop结束也就是队列中没有元素时 这就代表所有的元素都已经访问到了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值