zoukankan      html  css  js  c++  java
  • POJ 1258 Agri-Net (Prime)模板题

    <题目链接>

    题目大意:

    给你N*N矩阵,表示N个村庄之间的距离。FJ要把N个村庄全都连接起来,求连接的最短距离(即求最小生成树)。

    解题分析:

    Prim模板题,类似于这种完全图的情况下,用Prim求最小生成树较Kruskal更优一点。 

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <iostream>
    using namespace std;
    
    #define REP(i,s,t) for(int i=s;i<=t;i++)
    const int INF = 0x3f3f3f3f;
    const int N = 105;
    int n,mpa[N][N],vis[N],dis[N*N];
    
    void Prim(){
        long long sum=0;
        memset(vis,0,sizeof(vis));
        int cur=1;vis[cur]=1;
        REP(i,2,n)dis[i]=mpa[cur][i];
        REP(i,2,n){
            int mn=INF,loc;
            REP(j,1,n){
                if(!vis[j]&&mn>dis[j]){
                    mn=dis[j];
                    loc=j;
                }
            }
            sum+=mn;
            vis[loc]=1;
            REP(j,1,n){
                if(!vis[j]&&dis[j]>mpa[loc][j])
                    dis[j]=mpa[loc][j];
            }
        }
        printf("%lld
    ",sum);
    }
    
    int main(){
        while(~scanf("%d",&n)){
            memset(mpa,INF,sizeof(mpa));
            REP(i,1,n) REP(j,1,n){
                cin>>mpa[i][j];
            }
            Prim();
        }
    }


    作者:is_ok
    出处:http://www.cnblogs.com/00isok/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    Python 队列
    Python 栈
    Python面试百题
    TCP:四次挥手
    TCP:三次握手
    SQL:八 SQL高级处理
    SQL:七 集合运算
    SQL:六 函数、谓词、CASE表达式
    SQL:五 复杂查询
    python爬虫——爬取网页数据和解析数据
  • 原文地址:https://www.cnblogs.com/00isok/p/8687834.html
Copyright © 2011-2022 走看看