采用普里姆算法求最小生成树
目的:领会普里姆算法求带权连通图中最小生成树的过程和相关算法设计。
内容:编写一个程序exp8-5.cpp,实现求带权连通图最小生成树的普里姆算法。对于如图8.55所示的带权连通图G,输出从顶点0出发的一颗最小生成树。
[ 数据结构教程(第5版)李春葆 主编 ] 第8章上机练习实验题5
代码如下:
#include <iostream>
#include <cstdio>
using namespace std;
#define INF 0x3f3f3f3f
const int MAXV=1000;
struct MatGraph
{int edges[100][100];int n;
};
void prim(MatGraph g,int v)
{int lowcost[MAXV];int MIN;int closest[MAXV],i,j,k;for(i=0;i<g.n;i++)//给lowcost[]和closest[]置初值{lowcost[i]=g.edges[v][i];closest[i]=v;}for(i=1;i<g.n;i++)//找出(n-1)个顶点{MIN=INF;for(j=0;j<g.n;j++)//在(V-U)中找出离U最近的顶点kif(lowcost[j]!=0&&lowcost[j]<MIN){MIN=lowcost[j];k=j;//k记录最近顶点的编号}printf("边(%d,%d)权为:%d\n",closest[k],k,MIN);//输出最小生成树的一条边lowcost[k]=0;//标记k已经加入Ufor(j=0;j<g.n;j++)//对(V-U)中的顶点j进行调整if(lowcost[j]!=0&&g.edges[k][j]<lowcost[j]){lowcost[j]=g.edges[k][j];closest[j]=k;//修改数组lowcost和closest}}
}
int main()
{int i,j;MatGraph g;g.n=6;for(i=0;i<=5;i++)for(j=0;j<=5;j++){if(i==j) g.edges[i][j]=0;else g.edges[i][j]=INF;}g.edges[0][1]=g.edges[1][0]=5;g.edges[0][2]=g.edges[2][0]=8;g.edges[0][3]=g.edges[3][0]=7;g.edges[0][5]=g.edges[5][0]=3;g.edges[1][2]=g.edges[2][1]=4;g.edges[2][3]=g.edges[3][2]=5;g.edges[2][5]=g.edges[5][2]=9;g.edges[3][4]=g.edges[4][3]=5;g.edges[3][5]=g.edges[5][3]=6;g.edges[4][5]=g.edges[5][4]=1;printf("普里姆算法所求的最小生成树为:\n");prim(g,0);return 0;
}
运行结果如下:
采用普里姆算法求最小生成树相关推荐
- 实验题6.3 采用普里姆算法求最小生成树
[实验目的] (1)掌握图的最小生成树的概念: (2)熟练掌握用采用普里姆算法求最小生成树的方法及操作. [实验准备] (1)阅读教材中图的最小生成树相关内容: (2)熟悉普里姆算法. [实验要求] ...
- 普里姆算法求最小生成树(简易算法版)
普里姆算法求最小生成树与之前发的迪杰斯特拉算法求最小生成树的思想类似,都是用到一个dis数组,不过与迪杰斯特拉算法不同的是,之前迪杰斯特拉算法求最短路里dis存储的是源点到各点的最短路,每次循环找离源 ...
- 普里姆算法构造最小生成树
/* 普利姆算法求解最小生成树,它有两个集合,已选点构成一个集合,未被选出的点都成那个一个集合 需要三个辅助的数组,adjvex[n]储存边的起点 lowcost[n]用来储存选出边的权值,vexs[ ...
- 最小生成树普里姆算法c语言代码,普里姆算法生成最小生成树-C语言描述.doc
PAGE JIN JINGCHU UNIVERSITY OF TECHNOLOGY <数据结构(C语言描述)> 课程设计 学 院 计算机工程学院 班 级 12级软件技术1班 学 号 201 ...
- 我所知道的十大常用算法之普里姆算法(最小生成树)
前言需求 今天我们学习的是普里姆算法,我们还是从一个场景里引入看看 有7个村庄(A, B, C, D, E, F, G) ,现在需要修路把7个村庄连通 1.各个村庄的距离用边线表示(权) ,比如 A ...
- 编程中十大常用算法:(六)普里姆算法(最小生成树)
背景 修路问题: (1)有七个村庄(A-G),现需要修路把7个村庄连通 (2)各个村庄的距离用边线(权值)表示,例如村庄A到村庄B的距离为5公里 求: 如何修路保证各个村庄都能连通,并且总的修建公路总 ...
- 1129-2019-算法-普里姆算法(最小生成树MST-Prim算法)
最小生成树MST(Minimum Cost Spanning Tree ) 普里姆算法和克鲁斯卡尔算法 Prim算法 目的:求出最小连通子图 package Prim;import java.util ...
- 【HDU - 1301】Jungle Roads(并查集+最小生成树)(内附最小生成树两种算法 克鲁斯特尔算法amp;amp;普里姆算法)
题干: Jungle Roads Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 两种构造最小生成树的算法(普里姆算法,克鲁斯卡尔算法)
(一)普里姆算法 普里姆算法求最小生成树:从生成树中只有一个顶点开始,到定点全部进入生成数为止: 2.克鲁斯卡尔算法. 思想:将所有边按其权值从小到大排一遍,从小到大依次选取边,加入最小生成树中,若加 ...
最新文章
- java查看内存地址_Java内存机制和内存地址
- R语言ggplot2可视化分面图(facet_grid)、自定义缩小分面图标签栏的高度、但是不改变标签栏标签文本的大小、通过element_text函数的margin参数设置实现
- 轻量级大规模机器学习算法库Fregata开源:快速,无需调参
- V3S文件系统基本构架
- 推荐一个包含大量PDF编程电子书的github仓库
- mysql基础查询语法
- ajax中加入if,如何添加if语句到Ajax
- 落户杭州难不难!入户杭州超全办理细则来了!想落户杭州的赶紧看
- python 相关系数显著检验_Python dataframe 算相关系数用corr(),算不出结果
- 《呼吸法门精要》南师所讲。读后感
- 浏览器弹出“www.osint.com”并且导航到毒霸问题解决
- [Vijos]P1788 第k大
- 三院士漫谈:未来机器人:目标、路径和挑战
- Set 中 toArray()
- 关于git和 github
- 2018.9-江苏电赛省赛-基于STM32F103RCT6和FDC2214的手势识别装置
- DataCon 2020 Coremail邮件安全竞赛-赛题一满分writeup
- 3个适合初学者的Python最佳实践,值得拥有!
- 真趣大健康解决智慧医院物联网碎片化建设痛点
- nextcloud私有云一键搭建脚本