Python实现最小生成树-Prim和Kruskal算法
1. Prim算法
Prim算法用于找到一个连通加权无向图的最小生成树。它的基本思想是从一个节点开始,每次选择边权最小且不会形成环的一条边,直到包括图中所有的节点。
1.1 算法步骤:
- 从任意节点开始,初始化一个节点集合,将其标记为已访问。
- 找到所有连接已访问节点和未访问节点的边,选择权重最小的边,并将其连接的未访问节点加入集合。
- 重复步骤2,直到所有节点都被访问。
1.2 Python实现Prim算法
import heapq
def prim(graph):
# 初始化最小生成树和总权重
mst = []
total_weight = 0
# 从第一个节点开始
start_node = list(graph.keys())[0]
# 使用优先队列存储边
edges = [(0, start_node, start_node)]
visited = set()
while edges:
weight, u, v = heapq.heappop(edges)
if v in visited:
continue
visited.add(v)
mst.append((u, v, weight))
total_weight += weight
for next_node, next_weight in graph[v].items():
if next_node not in visited:

最低0.47元/天 解锁文章
3706

被折叠的 条评论
为什么被折叠?



