zoukankan      html  css  js  c++  java
  • 习题8.4 畅通工程之最低成本建设问题 (30分)--最小生成树

    输入样例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
    
     

    输出样例1:

    12
    
     

    输入样例2:

    5 4
    1 2 1
    2 3 2
    3 1 3
    4 5 4
    
     

    输出样例2:

    Impossible


    思路:用prim算法求最小生成树
    #include <stdio.h>
    #include <string.h>
    #define MaxVex 1000
    #define INF 0x3f3f3f3f
    int Nv,Ne;
    int G[MaxVex+1][MaxVex+1];
    int visit[MaxVex+1]= {0};
    int LowCost[MaxVex+1]= {0};
    void CreateGraph() {//用邻接矩阵初始化
        scanf("%d %d",&Nv,&Ne);
        int i,j;
        memset(G,INF,sizeof(G));
        for(i=1; i<=Nv; i++) {
            G[i][i]=0;
        }
        int v1,v2,cost;
        for(i=0; i<Ne; i++) {
            scanf("%d %d %d",&v1,&v2,&cost);
            G[v1][v2]=cost;
            G[v2][v1]=cost;
        }
    }
    int FindMin() {
        int min=INF;
        int i,pos=0;
        for(i=1; i<=Nv; i++) {
            if(!visit[i]&&LowCost[i]<min) {
                min=LowCost[i];
                pos=i;
            }
        }
        return pos;
    }
    int Prim() {
        int i,j,sum=0;
        for(i=1; i<=Nv; i++) {//从节点1开始
            if(!visit[i])
                LowCost[i]=G[1][i];
        }
        visit[1]=1;
        for(i=2; i<=Nv; i++) {
            int k=FindMin();
            if(k) {
                visit[k]=1;
                sum+=LowCost[k];
                for(j=1; j<=Nv; j++) {
                    if(!visit[j]&&G[k][j]<LowCost[j])
                        LowCost[j]=G[k][j];
                }
            } else return -1;
        }
        return sum;
    }
    int main() {
        CreateGraph();
        int sum=Prim();
        if(sum==-1)
            printf("Impossible");
        else
            printf("%d",sum);
    }


    勤能补拙,熟能生巧
  • 相关阅读:
    虚方法与非虚方法,native关键字
    Java多态
    Java对象初始化顺序
    继承、初始化
    递归,斐波那契,对象类型数组
    方法重载
    可变形参
    idea
    ss 如何解决margin-top使父元素margin失效
    js中call和apply的用法和区别
  • 原文地址:https://www.cnblogs.com/snzhong/p/12422552.html
Copyright © 2011-2022 走看看