
200114(最小生成树的Prim算法(贪心))
定义2个数组:lowcost和lowcost_belong(自己起的名字),其中lowcost用来记录权值,lowcost_belong用来记录lowcost中每个权值的归属顶点。 假设从顶点V0开始,那么初始化就是:
发布日期:2021-05-04 06:33:48
浏览次数:38
分类:精选文章
本文共 2174 字,大约阅读时间需要 7 分钟。

lowcost[0] = 0;//表示V0已经加入最小生成树,之后凡是lowcost数组中的值被置为0就表示此下标的顶点被纳入最小生成树for (int i = 1; i < G.numVEXS; i++) { lowcost[i] = G.arc[0][i];//lowcost剩下的部分用邻接矩阵第零行补满}int lowcost_belong[MAXVEX] = { 0 };
int lowcost_belong[MAXVEX] = { 0 };
表示最初lowcost中的所有权值都来自V0。
理解算法之后,完整代码如下(n-1条边,所以循环次数为n-1):
#includeusing namespace std;#define MAXVEX 15#define INFINITY 65536typedef struct { char vexs[MAXVEX];//顶点表 int arc[MAXVEX][MAXVEX];//邻接矩阵 int numVEXS;//顶点个数}MGraph;void MinispanTree_Prim(MGraph& G);int main() { MGraph G; G.numVEXS = 9; for (int i = 0; i < G.numVEXS; i++) for (int j = 0; j < G.numVEXS; j++) { if (i == j) G.arc[i][j] = 0; G.arc[i][j] = INFINITY; } G.arc[0][1] = 10; G.arc[0][5] = 11; G.arc[1][0] = 10; G.arc[1][2] = 18; G.arc[1][6] = 16; G.arc[1][8] = 12; G.arc[2][3] = 22; G.arc[2][8] = 8; G.arc[3][2] = 22; G.arc[3][4] = 20; G.arc[3][7] = 16; G.arc[3][8] = 21; G.arc[4][3] = 20; G.arc[4][5] = 26; G.arc[4][7] = 7; G.arc[5][0] = 11; G.arc[5][4] = 26; G.arc[5][6] = 17; G.arc[6][1] = 16; G.arc[6][5] = 17; G.arc[6][7] = 19; G.arc[7][3] = 16; G.arc[7][4] = 7; G.arc[7][6] = 19; G.arc[8][1] = 12; G.arc[8][2] = 8; G.arc[8][3] = 21; MinispanTree_Prim(G); system("pause"); return 0;}void MinispanTree_Prim(MGraph& G) { //initial int min; int k; int lowcost[MAXVEX]; int lowcost_belong[MAXVEX] = { 0 }; lowcost[0] = 0;//表示V0已经加入最小生成树,之后凡是lowcost数组中的值被置为0就表示此下标的顶点被纳入最小生成树 for (int i = 1; i < G.numVEXS; i++) { lowcost[i] = G.arc[0][i];//lowcost剩下的部分用邻接矩阵第零行补满 } //start for (int i = 0; i < G.numVEXS-1; i++) { //n-1条边 min = INFINITY; for (int j = 0; j < G.numVEXS; j++)//这个循环用来找出lowcost中的min { if (lowcost[j] != 0 && lowcost[j] < min) { min = lowcost[j]; k = j;//k用来记录min的下标 } } cout << lowcost_belong[k] << "-->" << k << endl; lowcost[k] = 0; for (int j = 0; j < G.numVEXS; j++) //这个循环用来刷新lowcost和lowcost_belong { if (lowcost[j] != 0 && G.arc[k][j] < lowcost[j])//lowcost[j] != 0是为了排除已经纳入最小生成树的结点 { lowcost[j] = G.arc[k][j]; lowcost_belong[j] = k; } } }}
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年03月27日 02时55分43秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
云计算之路-阿里云上:“黑色30秒”走了,“黑色1秒”来了,真相也许大白了
2021-05-09
云计算之路-阿里云上:奇怪的CPU 100%问题
2021-05-09
云计算之路-阿里云上:2014年6月12日12点IIS请求到达量突降
2021-05-09
上周热点回顾(6.9-6.15)
2021-05-09
上周热点回顾(6.16-6.22)
2021-05-09
上周热点回顾(10.20-10.26)
2021-05-09
上周热点回顾(2.16-2.22)
2021-05-09
上周热点回顾(3.2-3.8)
2021-05-09
.NET跨平台之旅:借助ASP.NET 5 Beta5的新特性显示CLR与操作系统信息
2021-05-09
上周热点回顾(7.27-8.2)
2021-05-09
上周热点回顾(9.28-10.4)
2021-05-09
上周热点回顾(5.2-5.8)
2021-05-09
上周热点回顾(5.9-5.15)
2021-05-09
上周热点回顾(8.8-8.14)
2021-05-09
.NET跨平台之旅:将示例站点升级至 .NET Core 1.1 Preview 1
2021-05-09
上周热点回顾(1.16-1.22)
2021-05-09
上周热点回顾(1.23-1.29)
2021-05-09
上周热点回顾(3.20-3.26)
2021-05-09
上周热点回顾(4.24-4.30)
2021-05-09
[故障公告]博客站点1台负载均衡遭遇流量攻击,造成联通与移动用户无法正常访问
2021-05-09