news 2026/9/1 7:47:14

用NetworkX对比深度优先和广度优先搜索

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用NetworkX对比深度优先和广度优先搜索

文章目录

    • 简介
    • 可视化实例

简介

广度优先搜索(breadth-first search, BFS)和深度优先搜索(depth-first search, DFS)是算法导论中最先介绍的两个图论算法,也是最简单的两种图搜索算法。所谓图搜索算法,其目的是有序地沿着图的边,访问其所有顶点。

NetworkX围绕BFS和DFS构建了许多函数,如下标所示

BFSDFS返回值
bfs_edgesdfs_edges边列表
bfs_treedfs_tree有向树
bfs_predecessorsdfs_predecessors字典:{节点:前驱节点}
bfs_successorsdfs_successors字典:{节点:后继节点}
bfs_preorder_nodesdfs_preorder_nodes前序遍历节点的生成器
bfs_postorder_nodesdfs_postorder_nodes后序遍历节点的生成器
bfs_labeled_edgesdfs_labeled_edges边的生成器

可视化实例

NetworkX提供的这些函数,其生成的BFS或DFS是一致的,区别主要是返回值的形式。下面对bfs_tree和dfs_tree进行测试,对比这两种搜索方法的差异,效果如下

其中,红色数字为搜索顺序。在BFS中,从【0】节点开始,先搜索与【0】相连的【1】和【2】,然后搜索与【1】【2】相连的【3】【4】【5】【6】;在DFS中,同样从【1】节点开始,但顺着【1】【3】【7】先搜索完,然后再回头搜索。

测试代码如下

importnetworkxasnximportmatplotlib.pyplotasplt plt.rcParams['font.sans-serif']='Times New Roman'G=nx.Graph()edges=[(0,1),(0,2),(1,3),(1,4),(2,5),(2,6),(3,7)]G.add_edges_from(edges)# 固定节点坐标,让两张图的布局完全一致pos={0:(0,3),1:(-2,2),2:(2,2),3:(-3,1),4:(-1,1),5:(1,1),6:(3,1),7:(-3,0)}trees={"BFS":nx.bfs_tree(G,0),"DFS":nx.dfs_tree(G,0)}fig,axes=plt.subplots(1,2,figsize=(10,4))forax,(title,T)inzip(axes,trees.items()):order=list(T.nodes())seq={n:str(i+1)fori,ninenumerate(order)}nx.draw(T,pos,ax=ax,with_labels=True,node_size=800,arrows=True)forn,(x,y)inpos.items():ax.text(x+0.5,y+0.22,seq[n],color="red",fontweight="bold")ax.set_title(title)ax.axis("off")ax.margins(0.25)plt.tight_layout()plt.show()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/1 7:45:08

Spring Boot注解全解:从入门到精通(面试避坑版)

Spring Boot注解全解:从入门到精通(面试避坑版) 本文系统梳理Spring Boot中最常用的注解,按照启动配置、Web层、IoC容器、AOP事务、属性绑定、条件注解六大分类逐一拆解。每个注解都配有作用说明、代码示例、实战避坑,…

作者头像 李华
网站建设 2026/9/1 7:44:45

OV7670摄像头驱动实战:从FIFO缓存到DMA搬运的完整链路

简介:面向OV7670摄像头开发场景,这份驱动代码基于STM32平台,实现了带FIFO(AL422b)的完整摄像头驱动,覆盖从SCCB寄存器配置、帧同步到图像数据读取的关键流程,适合嵌入式入门开发者及需要快速验证…

作者头像 李华
网站建设 2026/9/1 7:43:01

基于OpenTelemetry与Prometheus的生成式AI应用监控实战

这次我们来看一个名为“Bounded GenAI metrics from Otel traces with O raw prompts”的开源项目。这个项目瞄准的是当前生成式AI(GenAI)应用开发与运维中的一个核心痛点:如何有效监控和度量AI模型调用链路的性能、成本与质量。它通过OpenTe…

作者头像 李华
网站建设 2026/9/1 7:42:55

基于Spring Boot构建工业生产计划管理系统:从核心流程到技术实现

这类系统最值得先看的不是功能列表,而是能不能把生产计划、物料、订单、排程这些核心流程串起来,并且在实际部署时稳定运行。很多团队在选型或自研时,容易陷入两个误区:要么过度追求大而全,引入了大量用不上的复杂模块…

作者头像 李华
网站建设 2026/9/1 7:40:13

MPU9250与MPL库在STM32F1上的移植实战经验

简介:这是一套基于STM32F103C8T6与MPU9250的九轴姿态解算完整工程,面向嵌入式开发者和物联网相关学习者,旨在解决传感器数据采集与多源融合实时姿态输出的问题。工程通过PC11、PC12将I2C接口与MPU9250相连,包含完整的驱动层与MPL库…

作者头像 李华