最小生成树


最小生成树是在一个给定的无向图中求一棵树T,使得这颗树拥有图G中的所有顶点,且所有边都是来自图G中的所有顶点,且所有边都是来自图G中的边,并且满足整棵树的边权和最小。

prim算法实现

def prim(graph,num):
    visit=[False]*num
    INF =10000
    dist=[INF]*num
    for i in range(num):#从0开始将和相通的点的距离存放到dist[]中
        mindist = INF+1 #这两步都是为了一开始从V0开始遍历
        nextnode = -1
        for j in range(num):
            if dist[j]<mindist and not visit[j]:
                mindist = dist[j]
                nextnode = j #寻找下一个节点
        print (nextnode)
        visit[nextnode]=True
        for j in range(num):
            if graph[nextnode][j]<dist[j] and not visit[j]:
                dist[j]=graph[nextnode][j]
    Dist = 0
    print(dist)
    for i in range(1,num):
        Dist =Dist + dist[i]
    print (Dist)

_= 10000

graph = [
    [0, 10, _, _, 19,21],
    [10, 0, 5, 6, _, 11],
    [_, 5, 0, 6,  _,  _],
    [_, 6, 6, 0, 18, 14],
    [19, _, _, 18, 0,33],
    [21, 11, _,14,33, 0],
]

prim(graph, 6)

kruskal算法

思想:每次选择图中最小边权的边, 如果边两端的顶点在不同的连通块中,就把这条边加入到最小生成树中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值