时间:2021-05-19
复制代码 代码如下:
#include <iostream.h>
#define MAX 100
#define MAXCOST 100000
int graph[MAX][MAX];
int Prim(int graph[MAX][MAX], int n)
{
int lowcost[MAX];
int mst[MAX];
int i, j, min, minid, sum = 0;
for (i = 1; i < n; i++)
{
lowcost[i] = graph[0][i];
mst[i] = 0;
}
lowcost[0] = 0;
for (i = 1; i < n; i++)
{
min = MAXCOST;
minid = 0;
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;
lowcost[minid] = 0;
for (j = 1; j < n; j++)
{
if (graph[minid][j] < lowcost[j])
{
lowcost[j] = graph[minid][j];
mst[j] = minid;
}
}
}
return sum;
}
void main()
{
int i, 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;
}
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文介绍了最小生成树的定义,Prim算法的实现步骤,通过简单举例实现了C语言编程。1.什么是最小生成树算法?简言之,就是给定一个具有n个顶点的加权的无相连通图,
引言Prim算法与Dijkstra的最短路径算法类似,它采用贪心策略。算法开始先把图中权值最小的边添加到树T中,然后不断把权值最小的边E(E的一个端点在T中,另
本文实例讲述了C语言基于贪心算法解决装箱问题的方法。分享给大家供大家参考,具体如下:问题描述:有一些箱子,容量为V,同时有n个物品,每个物品有一个体积(小于等于
很久以前就学过最小生成树之Kruskal和Prim算法,这两个算法很容易理解,但实现起来并不那么容易。最近学习了并查集算法,得知并查集可以用于实现上述两个算法后
最小生成树Prim算法朴素版有几点需要说明一下。1、2个for循环都是从2开始的,因为一般我们默认开始就把第一个节点加入生成树,因此之后不需要再次寻找它。2、l