HDU-1233-还是畅通工程

Prim的板子题,没啥好讲的。
相似题以及题解:
https://blog.csdn.net/qq_41090676/article/details/86766394
可以用来练手。

#include <cstdio>
#include <cstring>
const int INF=0x3f3f3f3f;
int map[105][105], d[105], vis[105];
int n, res, end;

void Prim()
{
    memset(d, INF, sizeof(d));
    memset(vis, 0, sizeof(vis));
    d[1] = 0;
    res = 0;
    for (int i = 1; i <= n;i++) {
        end = -1;
        for (int j = 1; j <= n;j++) {
            if (!vis[j]&&(end==-1||d[j]<d[end])) {
                end = j;
            }
        }
        vis[end] = 1;
        res += d[end];
        for (int j = 1; j <= n;j++) {
            if (!vis[j]&&d[j]>map[end][j]) {
                d[j] = map[end][j];
            }
        }
    }
}

int main()
{
    while (scanf("%d",&n)&&n) {
        int N = n * (n - 1) / 2;
        int s, e, c;
        for (int i = 0; i < N;i++) {
            scanf("%d%d%d", &s, &e, &c);
            map[s][e] = map[e][s] = c;
        }
        Prim();
        printf("%d
", res);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/xyqxyq/p/10366582.html