Prim算法的实现
来源:互联网 发布:wrap相类似的软件 编辑:程序博客网 时间:2024/05/01 23:12
好吧,这是我写的Prim算法,直接上代码:
/*测试数据6 101 2 61 3 11 4 52 3 53 4 52 5 3 3 5 63 6 44 6 25 6 6*/#include <stdio.h>#include <stdlib.h>#include <string.h>#define N 100 //定义最大顶点数Nconst int MaxInt = 99999999;int map[N][N], low[N], visited[N], n; //map数组存储图的邻接矩阵形式的权值 //low数组记录每2个结点间最小权值,visited数组标记是否已被访问int prim(){int i, j, pos, min; // pos为位置int result = 0;memset(visited, 0, sizeof(visited));visited[1] = 1, pos = 1; // 从某点开始, 分别标记和记录该点for (i = 1; i <= n; i++)// 第一次给low数组赋值if(i != pos)low[i] = map[pos][i];printf("路径为:%d->", pos);for (i = 1; i < n; i++)// 再运行n-1次(给low数组赋值的操作){// 找出最小权值并记录位置min = MaxInt; for (j = 1; j <= n; j++)if(visited[j] == 0 && min > low[j]){min = low[j];pos = j;}printf("%d->", pos);result += min;// 最小权值累加visited[pos] = 1; // 标记该点//更新权值for (j = 1; j <= n; j++)if(visited[j] == 0 && low[j] > map[pos][j])low[j] = map[pos][j];}return result;}int main(){int i, j, m, s, e, w;while(scanf("%d %d", &n, &m) != EOF){// 所有权值初始化为最大for(i = 1; i <= n; i++)for(j = 1; j <= n; j++)map[i][j] = MaxInt;for (i = 0; i < m; i++){scanf("%d %d %d", &s, &e, &w);map[s][e] = map[e][s] = w;}printf("\n总权值 = %d\n", prim());}return 0;}
- Prim算法的实现
- Prim算法的实现
- 普里姆算法(prim)的实现
- Prim算法的简单实现
- prim算法的实现过程
- prim算法的java实现
- Prim算法的JAVA实现
- 最小生成树的prim算法实现
- Prim 普里姆算法的java实现
- hdu1875浅谈prim算法的朴素实现
- [数据结构] 图的Prim算法实现
- 最小生成树的prim算法实现
- prim算法的前向星实现
- 最小生成树的Prim算法实现
- Prim算法实现
- Prim算法实现类
- Prim算法实现
- c#实现Prim算法
- Spark源码分析之-scheduler模块
- AngularJS入门教程08:更多模板
- PYTHON实现刷流量工具
- SE-软件计划
- Spark源码分析之-deploy模块
- Prim算法的实现
- 获取手机号码
- ACM-DP之免费馅饼——HDU1176
- AngularJS入门教程09:过滤器
- 传统的MapReduce框架慢在那里
- AngularJS入门教程10:事件处理器
- Sample2.1:myfirst.cpp
- 面试奇怪question
- Spark Streaming Job Troubleshooting of Dependency Chain