zoukankan      html  css  js  c++  java
  • 题目1017:还是畅通工程(最小生成树)

    问题来源

      http://ac.jobdu.com/problem.php?pid=1017

    问题描述

      给你n个村庄,给出各个村庄之间的距离,求最小生成树。

    问题分析

      纯粹的求最小生成树问题。请参考:最小生成树(Prim算法+Kruskal算法)

    参考代码

    //
    // Created by AlvinZH on 2017/5/3.
    // Copyright (c) AlvinZH. All rights reserved.
    //
    
    #include<iostream>
    #include<string>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    
    const int INF=0x3f3f3f3f;
    const int N=101;
    
    int G[N][N];//邻接矩阵
    int Lowest[N];//权值数组,表示和已选顶点的最小权值,Lowest[i]=0表示点i已经在Vnew中
    int n,m;
    
    int prim()
    {
        int Num=0;//最小生成树权值
    
        for(int i=2;i<=n;i++)//选取第一个点开始
            Lowest[i]=G[1][i];//取第一行权值
    
        for(int i=1;i<n;i++)//找到新顶点加入(n-1个)
        {
            int minid=0;
            int mindis=INF;
            for(int j=2;j<=n;j++)//找到距离最小的
            {
                if(Lowest[j]!=0&&Lowest[j]<mindis)
                {
                    mindis=Lowest[j];
                    minid=j;
                }
            }
            Num+=mindis;
            Lowest[minid]=0;//把点minid加入Vnew
    
            for(int j=2;j<=n;j++)//更新Lowest数组
                if(Lowest[j]>G[minid][j])
                    Lowest[j]=G[minid][j];
        }
        return Num;
    }
    
    int main()
    {
        while(~scanf("%d",&n)&&n!=0)
        {
            memset(G,0x3f,sizeof(G));//初始化为最大值
            for(int i=1;i<=n;i++)//对角线为0
                G[i][i]=0;
    
            m=(n*(n-1))/2;
            int u,v,w;
            for(int i=1;i<=m;i++)
            {
                scanf("%d%d%d",&u,&v,&w);
                G[u][v]=G[v][u]=w;
            }
    
            int MST=prim();//计算最小生成树总权值
    
            printf("%d
    ",MST);
        }
    }

    作者: AlvinZH

    出处: http://www.cnblogs.com/AlvinZH/

    本人Github:https://github.com/Pacsiy/JobDu

    本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    学习git之路--1
    No input file specified. phpStudy nginx报错解决方案
    nginx隐藏tp路由index.php
    tp5命令行
    生成器
    php 解密小程序获取unionid
    根据GUID获取实例
    用SQL将数字转换为中文数字
    TFS无法确定工作区解决方案
    利用SQL语句产生分组序号
  • 原文地址:https://www.cnblogs.com/AlvinZH/p/6803734.html
Copyright © 2011-2022 走看看