zoukankan      html  css  js  c++  java
  • 最小生成树示例程序_Kruscal算法

    输入:顶点个数n和边数m,然后输入m行,每行输入格式:u v w 分别表示两个顶点和这个边的权值,顶点序号从1开始

    输出:一次选择的各条边和最终的最小生成树的权值

     1 #include <cstdio>
     2 #include <cstdlib>
     3 #include <algorithm>
     4 using namespace std;
     5 #define MAXN 1000
     6 #define MAXM 1000
     7 int parent[MAXN], n, m;
     8 typedef struct Edge {
     9     int u, v, w;
    10     bool operator < (const Edge &other) const {
    11         return w < other.w;
    12     }
    13 }Edge;
    14 Edge edge[MAXM];
    15 void init() {
    16     for (int i = 1; i <= n; ++i) parent[i] = -1;
    17 }
    18 int Find(int x) {
    19     int s = x, tmp;
    20     while (parent[s] >= 0) s = parent[s];
    21     while (s != x) {
    22         tmp = parent[x]; parent[x] = s; x = tmp;
    23     }
    24     return s;
    25 }
    26 void Union(int a, int b) {
    27     int x = Find(a), y = Find(b), tmp = parent[x] + parent[y];
    28     if (parent[x] < parent[y]) {
    29         parent[y] = x; parent[x] = tmp;
    30     } else {
    31         parent[x] = y; parent[y] = tmp;
    32     }
    33 }
    34 void kruscal() {
    35     int cnt = 0, sum = 0, i, u, v, w;
    36     for (i = 0; i < m; ++i) {
    37         u = edge[i].u; v = edge[i].v; w = edge[i].w;
    38         if (Find(u) != Find(v)) {
    39             cnt++; sum += w; printf("%d %d %d\n", u, v, w); Union(u, v);
    40         }
    41         if (cnt == n - 1) break;
    42     }
    43     printf("%d\n", sum);
    44 }
    45 int main(void) {
    46     freopen("kruscal.in", "r", stdin);
    47     while (~scanf("%d%d", &n, &m)) {
    48         int i, u, v, w;
    49         for (i = 0; i < m; ++i) {
    50             scanf("%d%d%d", &u, &v, &w); edge[i].u = u; edge[i].v = v; edge[i].w = w;
    51         }
    52         init(); sort(edge, edge+m); kruscal();
    53     }
    54 
    55     return 0;
    56 }

    呵呵

  • 相关阅读:
    getline函数
    Java获取某年某月的第一天
    计划任务中使用NT AUTHORITYSYSTEM用户和普通管理员用户有什么差别
    Windows 7系统安装MySQL5.5.21图解
    C#高性能大容量SOCKET并发(十一):编写上传client
    Linux 终端訪问 FTP 及 上传下载 文件
    完毕port(CompletionPort)具体解释
    ping不通的几种可能原因
    Apple Swfit UI控件实现
    js中取session的值
  • 原文地址:https://www.cnblogs.com/liuxueyang/p/3053004.html
Copyright © 2011-2022 走看看