C++怎么实现一个最小生成树Prim算法_C++图论算法与邻接矩阵实现


Prim算法从起始顶点出发,每次选择最近顶点加入生成树,利用贪心策略构建最小生成树。通过邻接矩阵存储图,用key数组记录各顶点到生成树的最短距离,mstSet标记已选顶点。初始化key为无穷大,起点key为0。循环中选取key最小且未访问的顶点u,将其加入MST,并遍历其邻接点v:若存在边(u,v)且v未访问且该边权重小于当前key[v],则更新parent[v]=u和key[v]=graphu。最终输出每条MST边及权重,总时间复杂度O(V²),适用于稠密图。示例图中MST总权值为16。

c++怎么实现一个最小生成树prim算法_c++图论算法与邻接矩阵实现

Prim算法用于在加权无向图中找出最小生成树(MST),即连接所有顶点且总权重最小的子树。C++中结合邻接矩阵实现该算法,逻辑清晰、便于理解。

Prim算法基本思想

从任意一个起始顶点开始,逐步将距离当前生成树最近的顶点加入集合,直到所有顶点都被包含。每次选择边权最小的边进行扩展,使用贪心策略保证整体最优。

关键点:

  • 维护一个集合表示已加入生成树的顶点
  • 用数组记录每个顶点到当前生成树的最短距离
  • 每次选出未访问顶点中距离最小者,并更新其邻接点的距离

邻接矩阵存储图结构

使用二维数组graph[V][V]表示图,graph[i][j]为顶点i到j的边权。若无边,则设为一个极大值(如INT_MAX)。

示例代码定义:

const int V = 5; // 顶点数
int graph[V][V] = {
    {0, 2, 0, 6, 0},
    {2, 0, 3, 8, 5},
    {0, 3, 0, 0, 7},
    {6, 8, 0, 0, 9},
    {0, 5, 7, 9, 0}
};

Prim算法实现步骤

以下是基于邻接矩阵的Prim算法完整实现:

NoCode NoCode

美团推出的零代码应用生成平台

NoCode 180 查看详情 NoCode
#include <iostream>
#include <climits>
using namespace std;
<p>int minKey(int key[], bool mstSet[]) {
int min = INT_MAX, min_index;
for (int v = 0; v < V; v++)
if (!mstSet[v] && key[v] < min)
min = key[v], min_index = v;
return min_index;
}</p><p>void printMST(int parent[], int graph[V][V]) {
cout << "Edge \tWeight\n";
for (int i = 1; i < V; i++)
cout << parent[i] << " - " << i << "\t" << graph[i][parent[i]] << endl;
}</p><p>void primMST(int graph[V][V]) {
int parent[V];
int key[V];
bool mstSet[V];</p><pre class='brush:php;toolbar:false;'>for (int i = 0; i < V; i++)
    key[i] = INT_MAX, mstSet[i] = false;

key[0] = 0;
parent[0] = -1;

for (int count = 0; count < V - 1; count++) {
    int u = minKey(key, mstSet);
    mstSet[u] = true;

    for (int v = 0; v < V; v++)
        if (graph[u][v] && !mstSet[v] && graph[u][v] < key[v])
            parent[v] = u, key[v] = graph[u][v];
}

printMST(parent, graph);

}

运行与输出说明

调用primMST(graph)后,程序输出每条选中的边及其权重。例如:

Edge    Weight
0 - 1   2
1 - 2   3
0 - 3   6
1 - 4   5

总权重为 2+3+6+5=16,构成一棵最小生成树。

时间复杂度为 O(V²),适合稠密图。若用优先队列优化可降至 O(E log V),但邻接矩阵下不易实现稀疏结构。

基本上就这些。掌握这个版本有助于理解Prim核心机制,后续可拓展为邻接表或动态图处理。

以上就是C++怎么实现一个最小生成树Prim算法_C++图论算法与邻接矩阵实现的详细内容,更多请关注其它相关文章!


# 最小生成树  # c++  # 如何使用  # 图论  # 最短  # 子树  # 多核  # stream  # ios  # edge  # 临沂官方seo优化  # 淘宝网站推广效果如何  # 苏州抖音关键词排名前十  # 网站的标题怎么优化好呢  # seo行业网站优化  # 河北区网站优化方案公司  # 惠州网站建设方法  # 沈阳网站建设网页制作  # 推荐网站推广软件  # 公安局网站建设请示  # 遍历  # 如何实现  # 点到  # 图中  # 每条 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 微信如何设置字体大小_微信字体设置的阅读舒适  谷歌浏览器官方镜像获取方法_谷歌浏览器网页版入口极速直达  汽水音乐车机版官网5.0 汽水音乐车机版5.0版本下载入口  mysql中如何分析索引使用情况_mysql索引使用分析方法  批改网官网首页登录 批改网学生用户登录入口  百度识图图像分析 百度识图识别平台  圆通快递官方入口不需要登录 在线查询入口快速查询  VS Code源代码管理(SCM)视图的进阶使用技巧  店铺如何关联视频号推广?视频号推广有什么用?  Python中安全地将环境变量转换为整数的类型注解指南  如何在 WordPress 前端实现内容提交:古腾堡编辑器的替代方案与实践  AO3官方镜像链接 | 最新防走失网址永久收藏  鲨鱼剧场app金币获取方法  《磁力猫》最好用的磁官网  msn官方入口2025登录 msn官网2025直达首页入口  知乎APP怎么查看自己被邀请的问题_知乎APP邀请回答记录查看与参与方法  手机远程连接电脑方法  我居然低估了 DeepSeek,这次更新它做到了这些!  如何在vscode中关闭it环境  TikTok收藏夹无法删除视频如何解决 TikTok收藏管理优化方法  QQ邮箱手机版网页版 QQ邮箱登录入口地址  火狐浏览器无法自动更新怎么办 手动更新火狐浏览器到最新版本【解决】  vivo手机视频通话美颜怎么设置_vivo视频通话美颜开启方法  繁花漫画使用教程  构建可配置的J*aScript加权点击计数器与共享总计功能  快手缓存清理方法  飞飞漫画漫画阅读官网_飞飞漫画漫画阅读官网进入阅读  解决jQuery多计算器输入字段冲突的教程  盲鳗善于分泌黏液猜猜主要用来做什么  斯宾塞称XGP云游戏“蒸蒸日上”:正在构建一个游戏从未如此唾手可得的未来  路由器DNS怎么设置最快 优化DNS提升上网速度教程  狙击外星人小游戏在线链接_狙击外星人小游戏网页链接  Yandex俄罗斯搜索引擎官网入口 Yandex网页端直接访问  《七读免费小说》开通会员方法  126邮箱申请入口官网_126邮箱注册免费登录2025  《雷电模拟器》自动点击设置方法  《tt语音》超级玩家开通方法  CSS如何使用outline-offset与颜色组合突出元素边框  Python项目中的条件导入:解决跨模块依赖问题  PHP动态导航按钮:根据用户登录状态切换链接与文本  钉钉任务无法提醒如何处理 钉钉任务提醒优化方法  《U校园》学生登录入口2025  sublime text 4如何安装_最新版sublime下载与汉化教程  《绝区零》2.3前瞻|直播|内容介绍  J*aScript模拟悬停与点击:自动化网页动态元素交互指南  WooCommerce 购物车:始终显示所有交叉销售商品  J*aScript大数运算_BigInt使用指南  苹果SE如何开启单手模式_苹果SE单手操作功能  火柴人战争网页版在线玩  抖音如何解除|直播|权限绑定_抖音关闭并解绑|直播|功能的方法 

 2025-11-24

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.