这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » DFS深度优先搜索python代码

共16条 1/2 1 2 跳转至

DFS深度优先搜索python代码

工程师
2022-10-16 23:54:40     打赏

最近在写分支定界求TSP的一个小项目,涉及到图和树的各种知识,就浅浅的从无向图的遍历开始总结一下近期的学习工作,使用DFS的递归遍历无向图。

邻接矩阵、邻接表等都可以用来表示一张图,这里使用邻接表数组来表示,即以顶点为索引的列表数组,具体实现使用字典来创建邻接表数组。

poYBAGNGKzGACJOcAAAxE4eKOeo310.png

深度优先搜索DFS简单地来说,就是在访问其中一个顶点时,将它标记为已访问,递归的访问它所有没有被标记的相邻顶点。

老习惯,上代码。

poYBAGNGKzyAAuJ7AABb3wOjgys887.png

运行看结果。

poYBAGNGK0yAHvgcAACSUbrIQFo956.png

浅浅的分析一下递归的过程

poYBAGNGK1yAai82AACYeBpPqJc420.png

dfs(0) ---dfs(1)---0已经被标记了,下一个dfs(3)---1已经被标记了,所以下一个dfs(2)---graph[2]里的0,3都被标记了,回到graph[3],接着dfs(5)--3已经被标记了,所以dfs(6)---接下来就简单了,dfs(4)。好像就结束了应该是这样吧。

到这里如果就结束的话,显得敷衍,折腾了一下,实现了一个简单有点笨的s-v的路径构建的功能,还是用上面的例子来说明,最后visited = [0,1,3,2,5,6,4],根据这个标记顺序,会有且仅有0-1,1-3,3-2,3-5,5-6,6-4被选中(别问为什么,这是我的规则)。

pYYBAGNGK26AaZN4AAD8oxmDK2k515.png

首先运行前面的dfs,得到 visited = [0,1,3,2,5,6,4],根据这个标记顺序,会有且仅有0-1,1-3,3-2,3-5,5-6,6-4被选中(别问为什么,这是我的规则)。看第4和5行,将构建u-v的路径转为构建v-u的路径。

会有人好奇为啥0到5的路径为啥不是0-3-5这条,因为0-3没有被标记啊!至于为什么,这就是我的规则,别管(懂的自然会懂我的心路历程,不懂就算,反正构建路径又不对成本、距离等做要求)。




高工
2022-10-17 00:21:56     打赏
2楼

这个很厉害


专家
2022-10-17 01:34:21     打赏
3楼

感谢楼主的分享,很实用了。


专家
2022-10-17 02:39:27     打赏
4楼

谢谢楼主分享




专家
2022-10-17 02:40:34     打赏
5楼

谢谢楼主分享




高工
2022-10-17 03:15:20     打赏
6楼

感谢楼主的分享,很实用了。


专家
2022-10-17 06:36:00     打赏
7楼

感谢楼主的分享


专家
2022-10-17 06:37:33     打赏
8楼

感谢楼主的分享


专家
2022-10-17 06:46:09     打赏
9楼

谢谢分享


专家
2022-10-17 08:14:23     打赏
10楼

感谢分享


共16条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]