prim算法 最小生成树MST

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXVEX 30
#define MAXCOST 1000
void prim(int c[MAXVEX][MAXVEX],int n)
{
    int lowcost[MAXVEX],closest[MAXVEX];
    for(int i=2;i<=n;i++){
        lowcost[i]=c[1][i];
        closest[i]=1;
    }
    closest[1]=0;
    for(int i=2;i<=n;i++)
    {
        int k=i,min;
        min=MAXCOST;
        for(int j=1;j<=n;j++)
        {
            if(closest[j]!=0&&lowcost[j]<min){
                min=lowcost[i];
                k=j;
            }
        }
        printf("(%d,%d)",closest[k],k);
        closest[k]=0;
        for(int j=1;j<=n;j++)
        {
            if(closest[j]!=0&&c[k][j]<lowcost[j]){
                lowcost[j]=c[k][j];
                closest[j]=k;
            }
        }
    }
}
int main()
{
    int c[MAXVEX][MAXVEX];
    int n,e;
    scanf("%d%d",&n,&e);
    memset(c,0,sizeof(c));
    int x,y,w;
    for(int i=0;i<e;i++)
    {
        scanf("%d%d%d",&x,&y,&w);
        c[x][y]=w;
    }
    prim(c,n);
    return 0;
}
//输入
//5 10
//1 2 6
//1 3 9
//2 4 7
//4 5 2
//5 3 3
//1 4 5
//1 5 13
//2 3 14
//2 5 8
//2 3 9
//输出数据
//(1,4)(4,2)(4,5)(4,3)

你可能感兴趣的:(prim算法 最小生成树MST)