Prim算法实现最小生成树
来源:互联网 发布:java中类属变量是什么 编辑:程序博客网 时间:2024/06/06 03:15
Prim算法: 从一个节点出发, 每次找到连接的边, 找到最小权重的边, 将边连接的节点加入集合, 找出集合中所有点连接的边, 在寻找最小边, 知道所有点都被找到. 将图存储在邻接矩阵中.
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int INF = 0x3fffffff;const int maxn = 10001;int n, m;int graph[maxn][maxn]; //将图存储在邻接矩阵中int lowcost[maxn]; //记录邻接点的最短边int visit[maxn]; //标记void readin(){ scanf("%d%d", &n, &m); int a, b, c; for(int i = 1; i <= n; ++i) for(int j = 1; j <= n; ++j) graph[i][j] = INF; for(int i = 1; i <= m; ++i){ scanf("%d%d%d", &a, &b, &c); graph[a][b] = c; graph[b][a] = c; }}void init(int start){ for(int i = 1; i <= n; ++i){ lowcost[i] = graph[start][i]; visit[i] = 0; }}int prim(int start){ int ans = 0; int min; init(start); visit[start] = 1; for(int i = 1; i <= n; ++i){ min = INF; int flag = -1; for(int j = 1; j <= n; ++j){ //找到最小值 if(!visit[j] && min > lowcost[j]){ min = lowcost[j]; flag = j; } } if(flag != -1){ cout << min <<endl; visit[flag] = 1; ans += min; //权值叠加 for(int j = 1; j <= n; ++j){ //更新lowcost if(!visit[j] && graph[flag][j] < lowcost[j]){ lowcost[j] = graph[flag][j]; } } } } return ans;}int main(){ readin(); int ans = prim(1); cout << ans <<endl; return 0;}/*5 61 2 12 3 21 3 21 4 34 3 54 5 3*/
阅读全文
0 0
- 最小生成树Prim算法实现
- 最小生成树的prim算法实现
- 最小生成树prim算法实现
- prim 最小生成树算法 java实现
- Prim算法实现最小生成树MST
- python实现prim 最小生成树算法
- poj1258--最小生成树prim算法实现
- 最小生成树prim算法实现
- 最小生成树prim算法实现
- 最小生成树prim算法实现
- 最小生成树Prim算法实现
- 最小生成树prim算法实现
- 简单实现最小生成树-Prim算法
- 最小生成树prim算法实现
- 最小生成树的prim算法实现
- 最小生成树prim算法实现
- 最小生成树prim算法实现
- 最小生成树prim算法实现
- @SpringBootApplication的使用【转】
- Struts2使用!动态方法调用无效(转载)
- eclipse连接远程服务器
- java native方法初认知
- 周志华机器学习读后总结 第八、九章
- Prim算法实现最小生成树
- laravel5日志设置篇(2/3) – 记录sql日志
- LVM基本概念及管理
- JVM之垃圾收集算法
- eclipse创建maven项目报Could not calculate build plan: Plugin org.apache.maven.plugins:maven-war-plugin:2.
- POJ 1852 Ants O(n)
- 用反射、注解及DBUtils对Dao层抽取
- zk的watcher机制
- 51nod 1268 和为K的组合 dfs