Prim算法求最小生成树
来源:互联网 发布:免费建站 知乎 编辑:程序博客网 时间:2024/06/10 16:28
Code:
Prim算法求最小生成树#include<bits/stdc++.h>using namespace std;const int maxn = 1000;int m, n;int cost[maxn][maxn];int dis[maxn];int visited[maxn];int prim(){/*算法流程:1.从任意一个顶点开始构造生成树,假设从1号顶点开始。首先将顶点1加入到生成树中,用visited数组来标记哪些顶点加入了生成树中。2.用dis数组来记录生成树到各个顶点的距离,最初生成树中只有1号顶点,dis数组里面存储的就是所有顶点到1号顶点的距离,没有边的的话就是无穷大(初始化数组)3.从dis数组中选出离生成树最近的顶点,加入到生成树中,然后在以新加入的这个点为中间点,更新其他顶点到这个生成树的距离4.重复过程3,直到有生成树里面有n个顶点*/ //初始化 memset(visited, 0, sizeof(visited)); for(int i = 1; i <= n; i++) dis[i] = cost[1][i]; dis[1] = 0; visited[1] = true; //!!!! //开始n-1次,好像一棵生成树在慢慢长大!! int N = n-1; int Cost = 0; while(N--) { int Dis = 0x3f3f3f3f; int pos; for(int i = 1; i <= n; i++) //z找到离生成树最近的那个点 { if(Dis > dis[i] && !visited[i]) { Dis = dis[i]; pos = i; } } if(Dis == 0x3f3f3f3f) return -1; Cost += Dis; visited[pos] = true; //松弛 for(int i = 1; i <= n; i++) { if(!visited[i]) dis[i] = min(cost[pos][i], dis[i]); } } return Cost;}int main(){ memset(cost, 0x3f, sizeof(cost)); scanf("%d %d", &n, &m); //点数, 边数 for(int i = 0; i < m; i++) { int v1, v2, val; scanf("%d %d %d", &v1, &v2, &val); cost[v1][v2] = cost[v2][v1] = val; } int ans = prim(); cout << ans << endl; return 0;}//Dijkstra 求最短路#include<bits/stdc++.h>using namespace std;int main(){ int x; while(cin >> x) { int m = x << 1 ; int n = (x << 1) | 1; cout << m << " " << n << endl; } return 0;}
阅读全文
0 0
- prim算法求最小生成树程序
- prim算法,求最小生成树。
- prim经典算法求最小生成树
- Prim算法求最小生成树
- Prim算法求最小生成树
- prim算法求最小生成树
- POJ2421 prim算法求最小生成树
- Prim 算法求最小生成树
- 求最小生成树,普里姆(Prim)算法
- 求最小生成树,普里姆(Prim)算法
- Prim算法求最小生成树
- 求最小生成树,普里姆(Prim)算法
- Prim(普里姆)算法求最小生成树
- Prim算法求最小生成树
- Prim算法求最小生成树
- hdu3371 prim算法求最小生成树
- Prim算法求MST(最小生成树)
- 求最小生成树的Prim算法
- sql server与mysql差异收集
- 如何在CentOS 5/6上安装EPEL 源
- 在CentOS上安装phpMyAdmin的教程
- SO_REUSEADDR和SO_REUSEPORT异同
- Python的多线程
- Prim算法求最小生成树
- 解决zabbix在configure时候遇到的问题(Ubuntu)
- 使用autoconf生成Makefile.in文件
- Linux创建线程的属性设置
- 1970年计算的时间转日期
- 简单电路实验
- mysql复合主键如何设定自增长属性
- java用递归方法返回文件下的所有子目录
- mysql的数据类型