最小生成树(prime)

#include <cstdio>
#include <iostream>
#include <cstring> 
using namespace std;
int dis[1000],sum=0,f[1000],a[1001][1001],ans[1000][3],p[1000];
int main()
{
    int n,m,t=0;

    scanf("%d%d",&n,&m);

    memset(dis,0x7f,sizeof(dis));
    memset(a,0x7f,sizeof(a));
    for(int i=1;i<=n;i++)
     p[i]=1;

    for(int i=1;i<=m;i++)
     {
        int x,y,s;

        scanf("%d%d%d",&x,&y,&s);

        a[x][y]=s;
        a[y][x]=s;

        t+=s; 
     } 

    dis[1]=0;

    for(int i=1;i<=n;i++)
     {
        int k=0;

        for(int j=1;j<=n;j++)
         if(f[j]==0&&dis[j]<dis[k]) k=j;

        f[k]=1;
        int x=0;

        for(int j=1;j<=n;j++)
         {
            if(f[j]==0&&a[k][j]<dis[j])
             dis[j]=a[k][j],p[j]=k;
         }

        //if(i!=1)
        // printf("%d %d
",p[k],k);
     }

     for(int i=1;i<=n;i++)
      sum+=dis[i];

    printf("%d",t-sum); 

    return 0;
} 
原文地址:https://www.cnblogs.com/ht008/p/6819837.html