0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

DFS深度优先搜索python代码

冬至子 来源:行在交通 作者:ai聊天机器人 2022-10-12 10:50 次阅读

最近在写分支定界求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没有被标记啊!至于为什么,这就是我的规则,别管(懂的自然会懂我的心路历程,不懂就算,反正构建路径又不对成本、距离等做要求)。




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • python
    +关注

    关注

    51

    文章

    4678

    浏览量

    83482
  • TSP
    TSP
    +关注

    关注

    1

    文章

    23

    浏览量

    16839
  • DFS
    DFS
    +关注

    关注

    0

    文章

    24

    浏览量

    9106
收藏 人收藏

    评论

    相关推荐

    python中运算符的优先级大小

    Python中运算符的优先级决定了表达式中各个运算符的计算顺序。了解运算符的优先级对于正确理解和编写复杂的表达式非常重要。本文将详细介绍Python中运算符的
    的头像 发表于 11-29 16:21 535次阅读

    python软件IDLE怎么打多行代码

    和一个用于编写、编辑和运行Python代码的编辑器窗口。在IDLE中编写多行代码有几种方法可以实现。 使用括号与换行符: 在IDLE中编写多行代码的一种常见方法是使用括号来将多行
    的头像 发表于 11-29 15:00 1907次阅读

    python软件怎么运行代码

    Python是一种高级编程语言,它被广泛用于开发各种类型的应用程序,从简单的脚本到复杂的网络应用和机器学习模型。要运行Python代码,您需要一个Python解释器,它可以将您的
    的头像 发表于 11-28 16:02 549次阅读

    python如何换行而不运行代码

    Python程序中的换行是指在代码中使用特定的语法来表示换行,以使代码更易读。换行的目的是为了让程序更具可读性并提高代码的可维护性。然而,换行不会对程序的执行产生任何影响,它只是改善了
    的头像 发表于 11-24 09:50 1451次阅读

    python代码写完后点哪个运行

    当你完成了编写Python代码后,你可以选择多种方式来运行它。下面是几种常见的运行代码的方式: Python解释器:Python是一种解释型
    的头像 发表于 11-24 09:28 1224次阅读

    python如何一直循环一个代码

    Python中,有几种方法可以实现代码的循环执行。下面我将详尽、详实、细致地介绍这些方法和它们的使用情况。 使用while循环: 在Python中,可以使用while循环来重复执行一段代码
    的头像 发表于 11-23 15:54 883次阅读

    python运算符优先级顺序口诀

    Python是一种非常流行的编程语言,具有广泛的应用领域。在Python中,运算符是进行各种数学和逻辑运算的关键部分。了解运算符的优先级顺序对于正确理解和书写Python
    的头像 发表于 11-22 14:34 779次阅读

    python如何换行而不运行代码

    Python中,换行是一种用来增加代码的可读性和组织性的方式。当你在编写Python代码时,换行通常用于分隔不同的代码行或块,使其更易于阅
    的头像 发表于 11-22 10:52 1310次阅读

    python怎样运行代码

    讨论Python代码的运行方式,包括解释器、交互式环境和命令行。 Python代码可以通过两种主要的方式运行:解释执行和编译执行。解释执行是指将源
    的头像 发表于 11-22 10:31 644次阅读

    Yapf:一个格式化 Python 代码的好帮手

    大部分人使用Python中的代码格式化工具时都会选择autopep8之类的工具,这些工具可能有一定的局限性,比如不会重新格式化已经符合 PEP8 的代码。 而本文即将介绍的 Yapf,不仅能将
    的头像 发表于 10-17 11:08 429次阅读
    Yapf:一个格式化 <b class='flag-5'>Python</b> <b class='flag-5'>代码</b>的好帮手

    优化Python代码有哪些工具

    代码。 1. Jupyter Notebook:这个交互式笔记本工具允许您在浏览器中编写和运行Python代码,并以文档形式保存。Jupyter Notebook使得代码的测试和实验更
    的头像 发表于 07-24 09:28 889次阅读

    Python实现OpenCV的安装与使用

      本文实例讲述了 Python 实现 OpenCV 的安装与使用。分享给大家供 大家参考,具体如下:  由于下一步要开始研究下深度学习,而深度学习领域很多的算法和应 用都是用 Python
    发表于 07-20 11:46 7次下载

    使Python代码在BeagleBoard上运行

    电子发烧友网站提供《使Python代码在BeagleBoard上运行.zip》资料免费下载
    发表于 06-16 15:03 0次下载
    使<b class='flag-5'>Python</b><b class='flag-5'>代码</b>在BeagleBoard上运行

    [源代码]Python算法详解

    [源代码]Python算法详解[源代码]Python算法详解
    发表于 06-06 17:50 0次下载

    Python编程实战(源代码)

    [源代码]Python编程实战 妙趣横生的项目之旅
    发表于 06-06 17:49 1次下载