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
    +关注

    关注

    58

    文章

    4883

    浏览量

    90295
  • TSP
    TSP
    +关注

    关注

    1

    文章

    26

    浏览量

    17475
  • DFS
    DFS
    +关注

    关注

    0

    文章

    26

    浏览量

    9614
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    [VirtualLab] 使用Python运行VirtualLab Fusion光学仿真

    摘要 VirtualLab Fusion允许Python外部访问其建模技术、求解器和结果。这个用例介绍了一种使用路径变量和Visual Studio代码Python连接到VirtualLab
    发表于 03-31 09:39

    2026年低代码平台市场综合评测:国内10大低代码平台深度解析

    至24周。本文结合Gartner、中国信通院等权威机构数据,全面解析低代码市场现状,并深度测评国内10大主流低代码平台,为企业选型提供精准参考。 一、2026年低代码平台市场综合数据
    发表于 03-30 16:02

    LTC4418:双路优先 PowerPath 控制器的深度解析与应用指南

    LTC4418:双路优先 PowerPath 控制器的深度解析与应用指南 在电子设计领域,电源路径管理至关重要,它关乎着系统的稳定性、可靠性和效率。LTC4418 作为一款双路优先
    的头像 发表于 02-06 14:45 386次阅读

    京东关键词搜索商品列表的Python爬虫实战

    京东关键词搜索商品列表 Python 爬虫实战 你想要实现京东关键词搜索商品的爬虫,我会从 合规声明、环境准备、页面分析、代码实现、反爬优化 五个方面展开,帮助你完成实战项目。 一、前
    的头像 发表于 01-04 10:16 1222次阅读

    1688搜索店铺列表API使用指南

    将从摘要、接口概述、Python 请求示例及结语四个维度,详细介绍该接口的使用方式。 一、摘要 1688 搜索店铺列表 API 是阿里巴巴开放平台为开发者提供的店铺检索接口,其核心功能是接收开发者的检索条件(如关键词、页码、地区、行业分类等),返
    的头像 发表于 12-23 14:31 4361次阅读

    1688拍立淘图片搜索API概述

    图片批量搜索。 数据维度:返回商品 ID、价格、销量、供应商资质等全维度信息。 2.请求地址:c0b.cc/R4rbK2 。 3.Python 调用建议 虽然无法提供完整代码,但调用流程通常包括: 图片预处理(压缩、格式转换)。
    的头像 发表于 12-17 14:56 465次阅读

    没有专利的opencv-python 版本

    (64位 Windows)场景优先推荐: 一、首选:Python 3.13 兼容的「无专利风险核心版」(无需 contrib) 直接安装 opencv-python 官方核心版(不含任何专利算法,仅
    发表于 12-13 12:37

    CS32L010系列能否支持串口的发送和接收中断单独配置?不同中断的中断优先级如何设置?

    1、串口能否配置成阻塞式发送和中断式接收。 2、不同中断的中断优先级如何设置?我在开启中断函数代码中看到说中断优先级配置需要先调用NVIC_PriorityGroupConfig()函数,但此函数无定义,全局
    发表于 12-10 18:46

    Termux中调试圣诞树Python代码

    在Termux中调试Python代码(以圣诞树立例)非常简单,核心分为环境准备、代码编写、运行调试三个步骤,下面一步步教你操作: 一、环境准备(首次使用需做) Termux默认可能没有Pyth
    发表于 12-09 09:02

    解析淘宝拍立淘按图搜索API接口与JSON数据示例参考

    应用。 获取API权限和密钥(App Key、App Secret)。 使用Python调用API的示例代码。 3. JSON数据示例与解析 返回的JSON数据结构解析。 如何提取关键信息(如商品ID、名称、价格、图片等)。 4. 拍立淘API的应用场景 图像
    的头像 发表于 11-11 13:19 463次阅读

    深度解析淘宝拍立淘按图搜索API接口与JSON数据示例参考

    引言 淘宝拍立淘是淘宝推出的一项基于图像识别的搜索功能,用户可以通过上传图片来搜索相似商品。淘宝开放平台提供了拍立淘按图搜索API接口,帮助开发者实现图像搜索功能。本文将
    的头像 发表于 11-06 13:43 423次阅读

    苏宁搜索接口深析:全品类智能分轨如何解决 O2O 电商的搜索痛点?

    本文深度解析苏宁全品类O2O搜索接口核心技术,涵盖智能分轨引擎、库存联动系统与高并发架构设计,解决多品类参数识别、线上线下库存同步等电商搜索痛点,助力构建高效精准的现代电商搜索体系。
    的头像 发表于 10-28 16:20 985次阅读
    苏宁<b class='flag-5'>搜索</b>接口深析:全品类智能分轨如何解决 O2O 电商的<b class='flag-5'>搜索</b>痛点?

    按图搜索1688商品的API接口

    服务(如ImageSearch)实现类似功能。本技术帖将逐步介绍原理、实现步骤和代码示例,帮助你构建一个可用的API接口。 1. 图像搜索原理 按图搜索的核心是基于内容的图像检索(CBIR),它通过提取图像特征向量并进行相似度计
    的头像 发表于 10-22 15:05 817次阅读
    按图<b class='flag-5'>搜索</b>1688商品的API接口

    阿里巴巴国际站关键字搜索 API 实战:3 步搞定多语言适配 + 限流破局,询盘量提升 40%

    跨境电商API开发常陷合规、多语言、限流等坑。本文详解从国际合规(GDPR/CCPA)到参数优化、数据结构化及区域化搜索的全链路方案,附Python代码模板与缓存重试架构,助力提升调用成功率至99%+,精准询盘增长42%。
    的头像 发表于 10-20 14:44 1957次阅读

    dfs_v1,vnode引用计数只增不减,无法释放怎么解决?

    对vnode引用计数减一,计数减一的代码dfs_posix.c中的close()函数里,代码如下: int close(int fd) { int result; struct dfs
    发表于 09-11 08:00