最小生成树
2020-04-26 19:06
1471 查看
1 //本代码解决,一个图的最小生成树的各边权值总和 2 3 #include<iostream> 4 using namespace std; 5 //static声明静态变量,只运行一次, const限定一个变量不允许被改变,产生静态作用。 6 static const int MAX = 100; 7 static const int INFTY = (1<<21); 8 static const int WHITE = 0; 9 static const int GRAY = 1; 10 static const int BLACK = 2; 11 12 int n, M[MAX][MAX]; 13 14 int prim() { 15 int u, minv; 16 /* 17 1.d[v]记录连接内顶点与V - T 内顶点的边中,权值最小的边的权值 18 2.p[v]记录MST中顶点的父节点 19 */ 20 int d[MAX], p[MAX], color[MAX]; 21 22 for(int i = 0; i < n; i++) { 23 d[i] = INFTY; 24 p[i] = -1; 25 color[i] = WHITE; 26 } 27 28 d[0] = 0; 29 30 while(1) { 31 minv = INFTY; 32 u = -1; 33 for(int i = 0; i < n; i++) { 34 if(minv > d[i] && color[i] != BLACK){ 35 u = i; 36 minv = d[i]; 37 } 38 } 39 //所有点都被遍历结束循环 40 if(u == -1) break; 41 42 color[u] = BLACK; 43 //更新与之相关的顶点 44 for(int v = 0; v < n; v++) { 45 if(color[v] != BLACK && M[u][v] != INFTY) { 46 if(d[v] > M[u][v]) { 47 d[v] = M[u][v]; 48 p[v] = u; 49 color[v] = GRAY; 50 } 51 } 52 } 53 } 54 55 int sum = 0; 56 for(int i = 0; i < n; i++) { 57 if(p[i] != -1) sum += M[i][p[i]]; //这里为什么不用sum+=d[i]呢,因为害怕它不是连通图 58 } 59 return sum; 60 } 61 62 int main() { 63 cin >> n; 64 //构建邻接矩阵 65 for(int i = 0; i < n; i++) { 66 for(int j = 0; j < n; j++) { 67 int e; 68 cin >> e; 69 M[i][j] = (e == -1) ? INFTY: e; 70 } 71 } 72 73 cout << prim() << endl; 74 return 0; 75 } 76 /* 77 5 78 -1 2 3 1 -1 79 2 -1 -1 4 -1 80 3 -1 -1 1 1 81 1 4 1 -1 3 82 -1 -1 1 3 -1 83 */
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- HDU - 4756 Install Air Conditioning(树形DP + 最小生成树)
- HDU 1233 还是畅通工程【最小生成树入门题,Kruskal算法+Prim算法】
- POJ - 2395 Out of Hay (图论/最小生成树)
- BZOJ 1601 [Usaco2008 Oct] 最小生成树 解题报告
- 最小生成树-prime-jobdu-1017
- POJ 1251 Jungle Roads(最小生成树kruskal)
- BZOJ 1821 [JSOI 2010] 最小生成树 解题报告
- 【测试】【最小生成树】图论专题训练--造路行动
- BZOJ 1016 [JSOI2008]最小生成树计数 Kruskal Matrix-Tree定理
- 【HDU】-1102-Constructing Roads(最小生成树)
- hdu 还是畅通工程 (基础)(最小生成树)(Prim算法 && Kruskal算法)
- 最小生成树--Prim算法(Python)
- hdoj 4786 Fibonacci Tree 【最小生成树 + 最大生成树】
- bzoj2753滑雪与时间胶囊(最小生成树)
- Kruskal算法求最小生成树
- POJ 题目2485 Highways(最小生成树最大边)
- BZOJ 2429 [HAOI2006]聪明的猴子 最小生成树 Prim
- 最小生成树
- [最小极差生成树 LCT || 二分答案 CDQ分治 并查集] Ural 2055 Urban Geography
- poj3532求生成树中最大权与最小权只差最小的生成树+hoj1598俩个点之间的最大权与最小权只差最小的路经。