MST的prim算法


int prim(int n)
{
    int lowcost[maxn];    //记录集合外的点到集合内的距离
    bool s[maxn];          //记录是否包含在集合中

    for(int i=1;i<=n;i++)
    {
        lowcost=c[1];
        s=false;
    }
    s[1]=true;                     //初始化

    int sum=0;
    for(int i=2;i<=n;i++)    //逐个找连接森林的最短边加入
    {
        int minn=INF;
        int u=-1;
        for(int j=1;j<=n;j++)   //找最短边
        {
            if(!s[j]&&lowcost[j]<minn)
            {
                u=j;
                minn=lowcost[j];
            }
        }
 
       if(u==-1)  return INF;//两个森林不联通
 
        sum+=minn;  s=true;

        for(int j=1;j<=n;j++)    //更新外围的距离
        {
            if(!s[j]&&c[j]<lowcost[j])
            {
                lowcost[j]=c[j];
            }
        }
    }

    return sum;
}


原文地址:https://www.cnblogs.com/CKboss/p/3350961.html