在图论和C++编程中,最小生成树(MST)是一个连通无向图中一棵包含图中所有顶点,并且边权之和最小的树。它在通信网络设计、电力传输网络构建等领域有着广泛的应用,例如在构建通信基站网络时,利用最小生成树算法可以以最小的成本连接所有基站,确保每个基站都能连通且总布线成本最低。
最小生成树的算法
常见的计算最小生成树的算法有普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法。
Prim算法
Prim算法从任意一个顶点开始,每次选择与当前生成树相连的边中权值最小的边,将其对应的顶点加入生成树,直到所有顶点都被加入。
算法步骤:
- 初始化一个空的最小生成树集合和一个距离数组
dist,dist数组用于记录每个顶点到当前生成树的最小距离,初始值设为无穷大,将起始顶点的距离设为0。 - 选择距离当前生成树最近的顶点(即
dist数组中值最小的顶点),将其加入最小生成树集合。 - 更新与该顶点相邻的顶点的
dist数组,若通过新加入的顶点到达某个相邻顶点的距离更短,则更新dist数组。 - 重复步骤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

最低0.47元/天 解锁文章
654

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



