Python数据结构,利用广度优先搜索编程实现确定无向图的连通分量。
3条回答 默认 最新
- 流比 2022-12-25 15:57关注
class Graph: def __init__(self, num_vertices): self.num_vertices = num_vertices self.adj_list = [[] for _ in range(num_vertices)] def add_edge(self, u, v): self.adj_list[u].append(v) self.adj_list[v].append(u) def bfs(graph, start, component_num, component): queue = [start] component[start] = component_num while queue: vertex = queue.pop(0) for neighbor in graph.adj_list[vertex]: if component[neighbor] is None: queue.append(neighbor) component[neighbor] = component_num def get_connected_components(graph): component_num = 0 component = [None] * graph.num_vertices for vertex in range(graph.num_vertices): if component[vertex] is None: bfs(graph, vertex, component_num, component) component_num += 1 return component # 创建图 g = Graph(5) g.add_edge(0, 1) g.add_edge(0, 2) g.add_edge(1, 2) g.add_edge(2, 3) # 获取连通分量 components = get_connected_components(g) print(components) # 输出:[0, 0, 0, 1, 2]
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 微信会员卡等级和折扣规则
- ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
- ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
- ¥15 gdf格式的脑电数据如何处理matlab
- ¥20 重新写的代码替换了之后运行hbuliderx就这样了
- ¥100 监控抖音用户作品更新可以微信公众号提醒
- ¥15 UE5 如何可以不渲染HDRIBackdrop背景
- ¥70 2048小游戏毕设项目
- ¥20 mysql架构,按照姓名分表
- ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分