C++最小生成树

在图论和C++编程中,最小生成树(MST)是一个连通无向图中一棵包含图中所有顶点,并且边权之和最小的树。它在通信网络设计、电力传输网络构建等领域有着广泛的应用,例如在构建通信基站网络时,利用最小生成树算法可以以最小的成本连接所有基站,确保每个基站都能连通且总布线成本最低。

最小生成树的算法

常见的计算最小生成树的算法有普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法。

Prim算法

Prim算法从任意一个顶点开始,每次选择与当前生成树相连的边中权值最小的边,将其对应的顶点加入生成树,直到所有顶点都被加入。

算法步骤:
  1. 初始化一个空的最小生成树集合和一个距离数组distdist数组用于记录每个顶点到当前生成树的最小距离,初始值设为无穷大,将起始顶点的距离设为0。
  2. 选择距离当前生成树最近的顶点(即dist数组中值最小的顶点),将其加入最小生成树集合。
  3. 更新与该顶点相邻的顶点的dist数组,若通过新加入的顶点到达某个相邻顶点的距离更短,则更新dist数组。
  4. 重复步骤2和3,直到所有顶点都被加入最小生成树集合。
C++ 实现代码:
#include <iostream>
#include <vector>
#include <limits>

using namespace std;

const int INF = numeric_limits<int>::max();

// Prim算法实现
int primMST(vector<vector<int>>& graph) {
   
   
    int n = graph.size();
    vector<int> key(n, INF);
    vector<bool> mstSet(n, false);
    key[0] = 0;

    for 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

༺ཌༀ傲穹_Vortexༀད༻

你的鼓励奖是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值