• POJ 1258 Agri-Net


     题目链接

    http://poj.org/problem?id=1258

    题目大意:

    农民约翰竞选为了这个小镇的市长,他竞选的时候承诺要把他所管辖区域的所有地方的网络连接起来。当然他需要你的帮助,约翰需要一个可以快速到达所有农民的联通网,为了降低成本他想要最少的光纤来来连接其他的农场。

    给你一个表,代表从一个农场到达另一个农场所需要的光纤花费,你要找出将所有农场连接起来的最小花费。每个农场都要连接起来, 我从一个农场可以到达其他任何一个农场,这里农场之间的距离不会超过 100000.

    输入:

    输入包含多个测试实例, 第一个一个 N 代表有N 个城镇,  然后是个 N*N 的邻接矩阵,

    输出:

    输出最小生成树。

    题目分析:

    明显的是求一个最小生成树,因为下面给的就是邻接矩阵, 所以我们用邻接矩阵写是最好不过了, 直接 Prime+ 邻接矩阵搞定

    #include <iostream>
    #include <cmath>
    #include <cstring>
    #include <cstdlib>
    #include <cstdio>
    #include <algorithm>
    #include <vector>
    #include <queue>
    using namespace std;
    #define INF 0xfffffff
    #define maxn 103
    
    struct Edge
    {
        int e, w;
        Edge(int e=0,int w=0) : e(e), w(w) {}
    };
    
    int G[maxn][maxn];
    bool vis[maxn];
    int dist[maxn], n;
    int Prime()
    {
        int sum = 0;
        dist[0] = 0;
        for(int i=0; i<n; i++)
        {
            int Min = INF, index;
            for(int j=0; j<n; j++)
            {
                if(!vis[j] && Min > dist[j])
                    index = j, Min = dist[j];
            }
            sum += Min;
            vis[index] = true;
    
            for(int j=0; j<n; j++)
            {
                if(!vis[j] && dist[j] > G[index][j])
                {
                    dist[j] = G[index][j];
                }
            }
        }
        return sum;
    }
    void Init()
    {
        for(int i=0; i<n; i++)
        {
            vis[i] = false;
            dist[i] = INF;
        }
    }
    
    int main()
    {
        while(cin >> n)
        {
            Init();
            for(int i=0; i<n; i++)
            {
                for(int j=0; j<n; j++)
                {
                    cin >> G[i][j];
                }
            }
    
            int ans = Prime();
    
            cout << ans <<endl;
        }
        return 0;
    }
  • 相关阅读:
    day13-web前端之JS与JQuery
    day16-python项目Django框架之基础
    day12-HTML、CSS与blog页面讲解
    day11-MySQL数据操作索引备份触发器
    day10-python并发编程之多线程协程及MySQL
    day9-python并发编程之多进程多线程
    day8-异常处理与网络编程
    面向对象实战扩展(课外阅读)
    day7-面向对象之继承组合多态封装等
    python学习大纲
  • 原文地址:https://www.cnblogs.com/chenchengxun/p/4197196.html
Copyright © 2020-2023  润新知