经典算法之Prim算法
来源:互联网 发布:廊坊管家婆软件 编辑:程序博客网 时间:2024/06/08 18:45
此算法为Prim算法完整版。具体prim算法分析请见
http://blog.csdn.net/yeruby/article/details/38615045
/************************author's email:wardseptember@gmail.comdate:2017.11************************/#include<iostream>#define INF 100//INF为比图中任何权值都大的数#define maxSize 6using namespace std;typedef struct {//图的定义 float edges[maxSize][maxSize];//邻接矩阵的定义 int n, e; //分别为顶点数和边数}MGraph;MGraph creatGraph(MGraph g);void prim(MGraph g, int v0, float &sum);//prim算法int main() { MGraph g;//定义并初始化图g g.edges[maxSize][maxSize] = { 0 }; g.n = maxSize; g.e = 10; g=creatGraph(g);//创建一个图 float sum; prim(g, 0, sum); cout << "最小生成树的权值为:"; cout << sum<<endl; return 0;}MGraph creatGraph(MGraph g) {/*此图的各个顶点为一个正无边形的顶点,加正中间一个点。正中间一个点与各个顶点相连*/ int i, j; for (i = 0; i < maxSize; i++) { for (j = 0; j < maxSize; j++) { g.edges[i][j] = INF; } } g.edges[0][1] = 6; g.edges[1][0] = 6; g.edges[0][2] = 1; g.edges[2][0] = 1; g.edges[0][3] = 5; g.edges[3][0] = 5; g.edges[1][2] = 4; g.edges[2][1] = 4; g.edges[1][4] = 3; g.edges[4][1] = 3; g.edges[2][3] = 2; g.edges[3][2] = 2; g.edges[2][4] = 7; g.edges[4][2] = 7; g.edges[2][5] = 8; g.edges[5][2] = 8; g.edges[3][5] = 9; g.edges[5][3] = 9; g.edges[4][5] = 11; g.edges[5][4] = 11; g.n = maxSize; g.e = 10; return g;}void prim(MGraph g, int v0, float &sum) { float lowcost[maxSize], vset[maxSize]; /*lowcost[maxSize]用于存储当前生成树到剩余各顶点最短边的权值, vset[maxSize]用于判断顶点是否并入生成树,vset[i]=1表示并入*/ int i, j, k,v ; float min; v = v0; for (i = 0; i < g.n; ++i) {//lowcost存入v0到各顶点的权值,vset初始化 lowcost[i] = g.edges[v0][i]; vset[i] = 0; } vset[v0] = 1;//顶点v0并入树中 sum = 0; for (i = 0; i < g.n - 1; ++i)//访问剩余的n-1个顶点。以下注释是此循环第一趟的注释,其他的类似 { min = INF; for(j=0;j<g.n;++j)//找到与v0相连的权值中的最小值 if (vset[j] == 0 && lowcost[j] < min) { min = lowcost[j]; k = j; } vset[k] = 1;//将顶点v并入树 v = k; sum = sum + min;//sum记录最小生成树的权值 //更新刚并入树的顶点v到剩余各顶点最短边的权值,与v0相比较 for (j = 0; j < g.n; ++j) if (vset[j] == 0 && g.edges[v][j] < lowcost[j]) lowcost[j] = g.edges[v][j]; }}
以上如有错误请立即指出,我立刻改正。
阅读全文
0 0
- 经典算法之Prim算法
- 【经典算法】:图中的最小生成树算法之Prim算法和Kruskal算法
- 图之prim算法
- Prim算法之我见
- 数据结构之Prim算法
- NetworkX之Prim算法
- 贪心算法之prim算法
- MST算法之Prim算法
- prim经典算法求最小生成树
- 图论 经典prim算法(MST)
- 经典Prim算法题目及代码
- 大话数据结构之Prim算法
- Prim算法之邻接矩阵实现
- Prim算法 之 Java详解
- 《大话数据结构》之Prim算法
- 图论之prim算法
- 最小生成树算法之Prim算法
- 最小生成树算法之Prim算法
- 关于Android Studio项目的Gradle构建 泡在网上的日子 / 文 发表于2016-02-16 12:16 第2500次阅读 Gradle 3 编辑推荐:稀土掘金,这是一个针对技术开发者的
- 如何掌握所有的程序语言?
- c++初始化列表的一些知识点
- C语言注释符号一本道来.md
- OpenCV图像旋转/改变亮度对比度/高斯滤波/改变宽高比
- 经典算法之Prim算法
- Java之数列最大值和最小值
- 01 十年的等待,换来最真诚的告白
- Android Activity 启动模式
- NB-IoT学习笔记_汇总
- anaconda常用命令
- Visual C++异常处理机制原理与应用(三)——C/C++结构化异常处理之try-except异常处理的使用(上)
- JDBC—JDBC中的异常处理
- Bzoj5088 HDU 6000 Wash