首页 > 生活文化 > 深入了解克鲁斯卡尔最小生成树算法

深入了解克鲁斯卡尔最小生成树算法

来源:咏瑗文化网

什么是克鲁斯卡尔最小生成树算法?

克鲁斯卡尔算法是用来求加权连通图的最小生成树的算法。所谓最小生成树,就是在保证生成树连通的前提下,其边权值之和最小的生成树。本算法按照边权值从小到大的顺序将每条边加入到生成树中,加入时必须保证生成树不形成环。

算法步骤

1) 将图中所有的边按边权从小到大排序;

2) 依次选取权值最小的边,如果这条边的加入对生成树不构成环,则将其加入生成树;

3) 重复步骤2,直至生成树中含有(n-1)条边,其中n为图中节点数。

代码实现

如果我们使用python语言,那么克鲁斯卡尔最小生成树算法的实现如下:

def find(parent, i):    if parent[i] == i:        return i    return find(parent, parent[i])def union(parent, rank, x, y):    xroot = find(parent, x)    yroot = find(parent, y)    if rank[xroot] < rank[yroot]:        parent[xroot] = yroot    elif rank[xroot] > rank[yroot]:        parent[yroot] = xroot    else:        parent[yroot] = xroot        rank[xroot]  = 1def kruskal(graph, V):    result = []    i, e = 0, 0    graph = sorted(graph, key=lambda item: item[2])    parent = []    rank = []    for node in range(V):        parent.append(node)        rank.append(0)    while e < V - 1:        u, v, w = graph[i]        i = i   1        x = find(parent, u)        y = find(parent, v)        if x != y:            e = e   1            result.append([u, v, w])            union(parent, rank, x, y)    return result
下一篇:没有了

相关信息