zoukankan      html  css  js  c++  java
  • 最小生成树之prim算法

    7-10 公路村村通(30 分)

    现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。

    输入格式:

    输入数据包括城镇数目正整数N1000)和候选道路数目M3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。

    输出格式:

    输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出1,表示需要建设更多公路。

    输入样例:

    6 15
    1 2 5
    1 3 3
    1 4 7
    1 5 4
    1 6 2
    2 3 4
    2 4 6
    2 5 2
    2 6 6
    3 4 6
    3 5 1
    3 6 1
    4 5 10
    4 6 8
    5 6 3
    

    输出样例:

    12

    最小生成树prim算法模板题

    题解

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #define INF 999999
    using namespace std;
    int n,m;
    int e[1005][1005];
    int lowCost[1005];
    long ans=0;
    void init(){
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                if(i==j) e[i][j]=0;
                else e[i][j]=INF;
            }
        }
    }
    int FindMin(){
        int k,i;
        int min=INF;
        for(i=1,k=0;i<=n;i++){
            if(lowCost[i]&&lowCost[i]<min){
                min=lowCost[i];
                k=i;
            }
        }
        return k;
    }
    int prim(){
        for(int i=1;i<=n;i++){
            lowCost[i]=e[1][i];
        }
        lowCost[1]=0;
        for(int i=1;i<n;i++){
            int k=FindMin();
            if(k){
                ans+=lowCost[k];
                lowCost[k]=0;
                for(int j=2;j<=n;j++){
                    if(lowCost[j]&&e[k][j]<lowCost[j]){
                        lowCost[j]=e[k][j];
                    }
                }
            }else return -1;
        }
        return ans;
    }
    int main()
    {
        cin>>n>>m;
        int a,b,c;
        init();
        while(m--){
            scanf("%d%d%d",&a,&b,&c);
            e[a][b]=c;
            e[b][a]=c;
        }
        cout<<prim()<<endl;
        return 0;
    }
    

  • 相关阅读:
    VS 2012 + NDK + ADT 开发(Cocos2d-x 3.1开发)PART 2
    VS 2012 + NDK + ADT 开发(Cocos2d-x 3.1开发)PART 1
    WebView读取SD卡上的HTML
    安卓隐藏控件
    OMNET++安装
    产品质量的核心——概念的完整性
    关于异常
    基类与子类之间的引用转换
    成绩划分 处理异常
    《大道至简 第七、八章》读后感
  • 原文地址:https://www.cnblogs.com/kzbin/p/9205288.html
Copyright © 2011-2022 走看看