python最小生成树代码,kruskal算法的
时间: 2024-06-24 10:00:45 浏览: 108
Kruskal.zip_e-tree_kruskal_最小生成树_简述kruskal_;Kruskal算法
Python中使用Kruskal算法来求解最小生成树(Minimum Spanning Tree, MST)时,通常会用到`heapq`库来实现堆数据结构,因为Kruskal算法依赖于边的排序和优先选择。以下是一个简单的Kruskal算法实现示例:
```python
import heapq
def kruskal(graph):
# 初始化边的集合,并按权重排序
edges = [(weight, (u, v)) for u, v, weight in graph]
edges.sort() # 根据边的权重升序排列
mst = [] # 最小生成树的边集合
visited = set() # 已访问节点的集合
# Kruskal算法核心循环
for weight, (u, v) in edges:
# 如果这条边连接的两个节点没有形成环(即不在已访问集合中)
if u not in visited and v not in visited:
visited.add(u)
visited.add(v)
mst.append((u, v, weight))
return mst
# 示例图的邻接矩阵或边列表
graph = [
[(0, 1, 1), (0, 2, 4), (1, 3, 8)],
[(1, 0, 1), (1, 2, 2), (2, 3, 7)],
[(2, 0, 4), (2, 1, 2), (3, 4, 9)],
[(3, 1, 8), (3, 2, 7), (4, 0, 14)],
]
mst = kruskal(graph)
print("最小生成树的边:", mst)
阅读全文