最小生成树

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#define N 1005
#define MAX 100000
int n, ans, A[N][N], dis[N], vis[N];

void Prim()
{
    memset(vis, 0, sizeof(vis));
    int i, j;
    for (i = 1; i <= n; i++)
        dis[i] = A[1][i];
    vis[1] = 1;
    ans = 0;
    for (i = 2; i <= n; i++)
    {
        int t = MAX, k = 0;
        for (j = 2; j <= n; j++)
        {
            if (!vis[j] && dis[j] < t)
            {
                t = dis[j];
                k = j;
            }
        }
        vis[k] = 1;
        ans += t;
        for (j = 2; j <= n; j++)
        {
            if (A[k][j] < dis[j])
                dis[j] = A[k][j];
        }
    }
}

int main()
{
    int i, j;
    scanf("%d", &n);
    for (i = 1; i <= n; i++)
    {
        for (j = 1; j <= n; j++)
            scanf("%d", &A[i][j]);
    }
    Prim();
    printf("%d
", ans);
    return 0;
}
原文地址:https://www.cnblogs.com/argenbarbie/p/5250830.html