标签:最长路 net namespace visit eof map algo min amp
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; } }
标签:最长路 net namespace visit eof map algo min amp
原文地址:https://www.cnblogs.com/KasenBob/p/11448911.html