贪心算法之最小生成树

Posted xjyxp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了贪心算法之最小生成树相关的知识,希望对你有一定的参考价值。

//program 2-6
#include <iostream>
using namespace std;

const int INF = 0x3fffffff;
const int N = 100;
bool s[N];
int closest[N];
int lowcost[N];
void Prim(int n, int u0, int c[N][N])
    //顶点个数n、开始顶点u0、带权邻接矩阵C[n][n]
    //如果s[i]=true,说明顶点i已加入最小生成树
    //的顶点集合U;否则顶点i属于集合V-U
    //将最后的相关的最小权值传递到数组lowcost
    s[u0]=true; //初始时,集合中U只有一个元素,即顶点u0
    int i;
    int j;
    for(i=1; i<=n; i++)
    
        if(i!=u0)
        
            lowcost[i]=c[u0][i];
            closest[i]=u0;
            s[i]=false;
        
        else
            lowcost[i]=0;
    

    for(i=1; i<=n;i++) //在集合中V-u中寻找距离集合U最近的顶点t
    
        int temp=INF;
        int t=u0;
        for(j=1;j<=n;j++)
        
            if((!s[j])&&(lowcost[j]<temp))
            
                t=j;
                temp=lowcost[j];
            
        
        if(t==u0)
            break;       //找不到t,跳出循环

        s[t]=true;     //否则,讲t加入集合U
        for(j=1; j<=n;j++) //更新lowcost和closest
        
            if((!s[j])&&(c[t][j]<lowcost[j]))
            
                lowcost[j]=c[t][j];
                closest[j]=t;
            
        
    


int main()


        int n, c[N][N], m, u, v, w;
        int u0;
        cout<<"输入结点数n和边数m:"<<endl;
        cin>>n>>m;
        int sumcost=0;
        for(int i=1; i<=n; i++)
            for(int j=1; j<=n; j++)
                c[i][j]=INF;
        cout <<"输入结点数u,v和边值w:"<<endl;
        for(int i=1; i<=m; i++)
        
            cin>>u>>v>>w;
            c[u][v]=c[v][u]=w;
        
        cout <<"输入任一结点u0:"<<endl;
        cin >> u0 ;
        //计算最后的lowcos的总和,即为最后要求的最小的费用之和
        Prim(n, u0, c);
        cout <<"数组lowcost的内容为"<<endl;
        for(int i = 1; i <= n; i++)
            cout << lowcost[i] << " ";
        cout << endl;
        for(int i = 1; i <= n; i++)
           sumcost += lowcost[i];
        cout << "最小的花费是:"<<sumcost<<endl;
    return 0;

 

以上是关于贪心算法之最小生成树的主要内容,如果未能解决你的问题,请参考以下文章

贪心算法之最小生成树(Prim和kruskal算法)

最小生成树算法Kruskal算法Prim算法切分定理贪心算法

图算法之最小生成树

[Python]贪心算法-Prim-和-Kruskal实现-最小生成树

基础-11:最小生成树(MST)

贪心算法:最小生成树