最小生成树

本文详细介绍了最小生成树的概念及其重要性,特别是Prim算法和Kruskal算法的原理和实现过程。Prim算法从一个顶点开始,逐步选择到生成树最短的边,直至构建完整个最小生成树。Kruskal算法则通过对所有边按权值排序,依次选择可用的最短边,同时使用并查集避免形成环。文章还提供了样例输入和输出,帮助理解这两种算法的应用。
摘要由CSDN通过智能技术生成

prim算法

        一个连通图的生成树是它的极小连通子图,在n个顶点的情况下,有n-1条边。也就是说,生成树是对连通图而言的,是连通图的极小连通子图,包含图中的所有顶点,有且仅有 n-1 条边。
    在图论中,我们常常将树定义为一个无回路连通图。对于一个带权的无回路连通图,其每个生成树所有边上的权值之和不能不同,我们把所有边上权值之和最小的生成树称为图的最小生成树。。常见的求最小生成树的方法有两种:克鲁斯卡尔(Kruskal)算法和普里姆(Prim)算法。下面介绍Prim算法。

    那我们如何选择这n个顶点,使得这n个顶点组成的n-1条边的总长度最短呢?
    我们从顶点1开始,把顶点1加入生成树集合(顶点集合),在一端以顶点1为端点的边中,选择一条最短的,把另一个端点加入生成树;然后选择一条到生成树最短的边,把此时这条边一个端点肯定在生成树中,把另一个端点也加入生成树。依次选择到生成树最短的边……直到选择了n-1条边为止。

Prim算法的原理:
    先从顶点1开始,每次选择到生成树最小的边,然后把这条边另一个端点加入生成树;再选择到生成树最短的边,把另一个端点加入生成树;…… 直到选择了n-1条边为止。

        本算法的关键在于如何求各个顶点(不在生成树内)到生成树的最短边?
程序中我们定义了一个数组dis[i],表示顶点i到生成树的最短距离,那么就解决了这个问题。
    同时&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值