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

使用深度优先搜索(DFS)识别无向图中的连通分量

本文介绍如何通过深度优先搜索算法,从任意起始节点出发,找出无向图中所有可达节点,并进一步识别整个图的连通分量——即彼此可达的节点集合,适用于邻接矩阵或邻接表表示的图结构。 本文介绍如何通过深度优先搜索算法,从任意起始节点出发,找出无向图中所有可达节点,并进一步识别整个图的连通分量——即彼此可达的节点集合,适用于邻接矩阵或邻接表表示的图结构。在无向图中,“从某节点出发能访问到哪些节点”本质上是连通性判定问题;而将全图划分为若干极大连通子图,则称为连通分量(Connected Components)识别。每个连通分量内的任意两个节点均存在路径相连,不同分量之间则完全不连通——这正是你示例中 {A, D, E} 与 {B, C} 的本质关系。解决该问题的核心思路是:对每个未访问节点启动一次 DFS(或 BFS),遍历其可达的所有节点,并统一标记为同一分量编号。以下为基于邻接矩阵实现的 Python 示例(兼容初学者理解,无需额外依赖):def find_connected_components(adj_matrix): """ 输入:n×n 邻接矩阵(元素为0/1,表示无边/有边) 输出:长度为n的列表,components[i] 表示节点i所属的连通分量编号(从1开始) """ n = len(adj_matrix) components = [0] * n # 0 表示未访问 comp_id = 1 def dfs(v): components[v] = comp_id for u in range(n): if adj_matrix[v][u] == 1 and components[u] == 0: dfs(u) for i in range(n): if components[i] == 0: dfs(i) comp_id += 1 return components# 示例图:节点索引 0→A, 1→B, 2→C, 3→D, 4→Eadj = [ [0, 0, 0, 1, 0], # A: connected to D [0, 0, 1, 0, 0], # B: connected to C [0, 1, 0, 0, 0], # C: connected to B [1, 0, 0, 0, 1], # D: connected to A, E [0, 0, 0, 1, 0] # E: connected to D]result = find_connected_components(adj)node_names = ['A', 'B', 'C', 'D', 'E']mapping = dict(zip(node_names, result))print("分量编号:", result) # [1, 2, 2, 1, 1]print("节点映射:", mapping) # {'A': 1, 'B': 2, 'C': 2, 'D': 1, 'E': 1}? 关键说明与注意事项: RedClaw 百度推出的手机端万能AI Agent助手

http://www.jsqmd.com/news/623155/

相关文章:

  • WindowResizer:打破Windows窗口尺寸限制的专业解决方案
  • Ubuntu22.04配置向日葵远程控制:从安装到开机自启动全指南
  • 给大家普及下大模型微调需达到的学习强度
  • 5个真实案例解析:TLA+在分布式系统验证中的实际应用
  • 如何用CubeMX+Keil快速搞定DS1302时钟驱动?超详细配置教程
  • 华为eNSP实战:DHCP Snooping配置与非法服务器防御
  • 党建知识竞赛策划全流程指南
  • 想要达成业绩目标?经营分析会上这3点必须做到位
  • 终极Saasfly第三方服务集成指南:如何快速添加支付网关和认证提供商
  • 英雄联盟智能助手:从铂金到大师的终极效率提升方案
  • Marketch终极指南:如何快速将Sketch设计稿转换为HTML页面
  • STDF-Viewer:半导体测试数据的智能导航仪
  • 便利贴上的密码,让健身房变成了“80年代恐怖片现场“
  • 闲置京东 E 卡别再躺平过期了!这样处理省心又不亏 - 团团收购物卡回收
  • 终极指南:如何用GPT-Author快速生成专业EPUB电子书
  • 深入探讨Python中max函数的key参数
  • 服务器风扇接口信号详解:12V供电/PWM调速/TACH测速的硬件实现
  • Arduino HID项目终极指南:将普通开发板升级为高级USB控制器
  • “包工头比喻”:刺穿波普尔“施工诈骗”的思想利刃|Contractor Metaphor: Ideological Blade Piercing Popper Construction Fraud
  • 杀戮尖塔2mods
  • 终极指南:Adafruit GFX库带你轻松玩转嵌入式图形编程
  • JsSIP安全最佳实践:如何保护你的WebRTC通话免遭攻击
  • 从Naive到Tiled:手把手教你用CUDA实现1D卷积的四种优化策略(附完整代码)
  • 想玩像素艺术?试试像素幻梦创意工坊,开箱即用的AI绘图神器
  • 【51单片机实战解析】并行I/O扩展利器:8255A芯片的三种工作模式与应用场景
  • 终极任务栏分组工具:5分钟掌握桌面高效管理
  • 3步实现微信聊天记录永久保存:WeChatMsg完整指南
  • 27-1复赛考试文件的创建和文件体提交
  • 如何用Python快速构建量化交易策略?完整指南
  • 武汉围挡厂家:一站式解决方案助力项目落地