其他分享
首页 > 其他分享> > poj2485

poj2485

作者:互联网

1.链接地址

https://vjudge.net/problem/POJ-2485#author=windsky1

2.问题描述

   A国没有高速公路,因此A国的交通很困难。政府意识到了这个问题并且计划建造一些高速公路,以至于可以在不离开高速公路的情况下在任意两座城镇之间行驶。

   A国的城镇编号为1到N, 每条高速公路连接这两个城镇,所有高速公路都可以在两个方向上使用。高速公路可以自由的相互交叉。

   A国政府希望尽量减少最长高速公路的建设时间(使建设的最长的高速公路最短),但是他们要保证每个城镇都可以通过高速公路到达任意一座城镇。

输入样例

1

3
0 990 692
990 0 179
692 179 0

输出样例

692

3.解题思路

给定一个邻接矩阵,要求求出构建出的最短路中的最长路径

一开始一直求成最短路长度一直错误,后来看了题解才明白是最短路中的最长路径。。。

可以使用克鲁斯卡尔算法或者prim算法

4.算法实现源代码

#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<algorithm>
#include<cstdio>
using namespace std;

const int maxn=500+10;
int map[maxn][maxn];
int visit[maxn];
int lowdis[maxn];
int n;

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                int a;
                scanf("%d",&a);
                if(a==0)
                {
                    map[i][j]=1e9;
                }
                else
                {
                    map[i][j]=a;
                }
            }
        }
        memset(visit,0,sizeof(visit));
        for(int i=1;i<=n;i++)
        {
            lowdis[i]=map[1][i];
        }
        int maxdis=0,min,next;
        visit[1]=1;
        for(int i=1;i<n;i++)
        {
            min=1e9;
            for(int j=1;j<=n;j++)
            {
                if(!visit[j]&&lowdis[j]<min)
                {
                    min=lowdis[j];
                    next=j;
                }
            }
            visit[next]=1;
            maxdis=maxdis>min?maxdis:min;
            for(int j=1;j<=n;j++)
            {
                if(!visit[j]&&lowdis[j]>map[next][j])
                {
                    lowdis[j]=map[next][j];
                }
            }
        }
        cout<<maxdis<<endl;
    }
}

 

标签:int,短路,城镇,高速公路,poj2485,maxn,include
来源: https://www.cnblogs.com/KasenBob/p/11448911.html