纯C语言:贪心Prim算法生成树问题源码分享
2023-06-13 09:15:15 时间
#include<iostream.h>
#defineMAX100
#defineMAXCOST100000
intgraph[MAX][MAX];
intPrim(intgraph[MAX][MAX],intn)
{
/*lowcost[i]记录以i为终点的边的最小权值,当lowcost[i]=0时表示终点i加入生成树*/
intlowcost[MAX];
/*mst[i]记录对应lowcost[i]的起点*/
intmst[MAX];
inti,j,min,minid,sum=0;
/*默认选择0号节点加入生成树,从1号节点开始初始化*/
for(i=1;i<n;i++)
{
/*最短距离初始化为其他节点到0号节点的距离*/
lowcost[i]=graph[0][i];
/*标记所有节点的起点皆为默认的0号节点*/
mst[i]=0;
}
/*标记0号节点加入生成树*/
lowcost[0]=0;
/*n个节点至少需要n-1条边构成最小生成树*/
for(i=1;i<n;i++)
{
min=MAXCOST;
minid=0;
/*找满足条件的最小权值边的节点minid*/
for(j=1;j<n;j++)
{
/*边权值较小且不在生成树中*/
if(lowcost[j]<min&&lowcost[j]!=0)
{
min=lowcost[j];
minid=j;
}
}
/*输出生成树边的信息:起点,终点,权值*/
cout<<"生成数边的起点、终点及权值分别为:"<<mst[minid]+1<<" "<<minid+1<<" "<<min<<endl;
/*累加权值*/
sum+=min;
/*标记节点minid加入生成树*/
lowcost[minid]=0;
/*更新当前节点minid到其他节点的权值*/
for(j=1;j<n;j++)
{
/*发现更小的权值*/
if(graph[minid][j]<lowcost[j])
{
/*更新权值信息*/
lowcost[j]=graph[minid][j];
/*更新最小权值边的起点*/
mst[j]=minid;
}
}
}
/*返回最小权值和*/
returnsum;
}
voidmain()
{
inti,j, m,n;
int cost;
/*读取节点的数目*/
cout<<"请输入该图结点个数:";
cin>>m;
/*初始化图,所有节点间距离为无穷大*/
for(i=0;i<m;i++)
{
for(j=i+1;j<m;j++)
{
cout<<"请输入结点"<<i+1<<"到结点"<<j+1<<"边的权值,若无边则输入MAXCOST(100000):";
cin>>n;
graph[i][j]=n;
graph[j][i]=n;
}
graph[i][i]=MAXCOST;
}
/*求解最小生成树*/
cost=Prim(graph,m);
cout<<"最小生成树的权值为:"<<cost<<endl;
}
相关文章
- c语言编程 sort()什么意思,void sort在C语言中什么意思?「建议收藏」
- C语言开发简单的学生成绩管理系统(附源码)
- 选择排序算法(C语言实现)[通俗易懂]
- C语言双链表,循环链表,静态链表讲解(王道版)
- 蓝桥杯 名次判断(详解)----------------C语言—菜鸟级
- 蓝桥杯 算法提高 数的划分(图解DFS +DP)------------C语言—菜鸟级
- 算法训练 格子操作(线段树)-----------C语言—菜鸟级
- 二分匹配 匈牙利算法 模板-------------------C语言——菜鸟级
- C语言getchar的用法_getchar的用法
- C语言 排序算法_C语言中三大经典的排序算法
- C语言中负数做运算你会了吗
- C语言中常见指针问题集解答
- 【安全算法之MD5】MD5摘要运算的C语言源码实现
- c程序段-C语言 位运算:位段
- C语言 | 动图演示十大经典排序算法(含代码)
- C语言统计单词个数,单词个数算法
- C语言选择排序算法
- C语言分块查找算法,索引顺序查找算法
- C语言log10()函数:返回以10为底的对数
- Linux下C语言编程入门
- 使用C语言封装的MySQL操作类让数据库开发更简单(c mysql操作封装类)
- 监测MySQL数据库变化C语言实现(C mysql变化监听)
- C语言结合Oracle数据库,使用方法汇总(c oracle用法)
- 拓展数据库技能C语言调用Oracle包(c oracle 包调用)
- 最小生成树算法C语言代码实例
- 马尔可夫链算法(markov算法)的awk、C++、C语言实现代码
- C语言实现字符串匹配KMP算法
- C语言快速幂取模算法小结