最小生成树(MST)是一棵子图,它连接了图中的所有顶点且总权重最小。常见的最小生成树算法有Kruskal算法和Prim算法。下面是使用Python实现这两种算法的示例。
Kruskal算法
Kruskal算法通过边的权重从小到大排序并逐步添加边来构建最小生成树,避免形成环。
class DisjointSet:
def __init__(self, n):
self.parent = list(range(n))
self.rank = [0] * n
def find(self, u):
if self.parent[u] != u:
self.parent[u] = self.find(self.parent[u])
return self.parent[u]
def union(self, u, v):
root_u = self.find(u)
root_v = self.find(v)
if root_u != root_v:
if self.rank[root_u] > self.rank[root_v]:
self.parent[root_v] = root_u
elif self.rank[root_u] < self.rank[root_v]:
self.parent[root_u] = root_v
else:
self.parent[root_v] = root_u
self.rank[root_u] += 1
def kruskal(n, edges):
edges.sort(key=lambda x: x[2]) # 按边的权重排序
ds = DisjointSet(n)
mst = []
for u, v, weight in edge

&spm=1001.2101.3001.5002&articleId=140878342&d=1&t=3&u=8d8b34d741d944e4b70cfe7e5e18c67b)
982

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



