当前位置: 首页 > news >正文

用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()
http://www.cnnetsun.cn/news/4347583.html

相关文章:

  • Spring Boot注解全解:从入门到精通(面试避坑版)
  • OV7670摄像头驱动实战:从FIFO缓存到DMA搬运的完整链路
  • 嵌入式Linux内存调试实战:Electric Fence在ARM平台上的应用与案例分析
  • 基于OpenTelemetry与Prometheus的生成式AI应用监控实战
  • 基于Spring Boot构建工业生产计划管理系统:从核心流程到技术实现
  • MPU9250与MPL库在STM32F1上的移植实战经验
  • 2004-2023美赛O奖论文拆解:价值、整理与迁移实战
  • iOS虚拟摄像头:基于AVFoundation与VideoToolbox的视频管道
  • COC Replay制作全流程:本地语音转写、多角色配音、AI立绘与ffmpeg合成实战指南
  • Qt电力组态软件开发实战:核心架构、图元编辑与数据驱动
  • 正点原子Mini STM32F103RCT6驱动RC522读卡程序详解
  • 5.2kW猛火燃气灶怎么选?嵌入式台式两用安装与验收指南
  • 大模型部署优化:从MiniMax M3与SambaNova集成看专用硬件推理实践
  • 联想校招C语言岗备考指南:从考点拆解到项目实战
  • 实战阶段项目:天气查询桌面应用
  • STM32+HX711电子秤仿真设计:从原理到Proteus实现
  • 从零搭建HP-Lite内网穿透服务:轻量级NAT穿透工具实战指南
  • 重庆南坪商圈餐饮门面转让:会展、通勤和社区客流如何分开算
  • pysoem实现EtherCAT主站通信:从环境搭建到可运行源码实战
  • Claude Code企业级插件开发实战:Skill、命令与MCP集成
  • Pikachu漏洞靶场系列之暴力破解
  • DETR目标检测模型实战:从原理到Hugging Face部署
  • main_window.py(一):主窗口框架与菜单栏|信息化项目全流程管理系统源码逐行精讲(二十六)
  • 基于SpringBoot的黄山旅游在线票务系统毕业设计项目源码文档
  • 大模型推理优化:量化、KV Cache 与吞吐
  • 2026年7月萍乡市新房价格深度分析报告
  • 基于SpringBoot的汽车4S店管理系统设计与实现(源码+lw+部署文档+讲解等)
  • Simscape制冷循环双工况仿真:R134a与R14a对比建模全攻略
  • springboot技能与工具共享小程序29657-计算机课程设计、毕业设计
  • 服装进销存的“隐形分水岭”:当系统学会在问题爆发前“自我修复”