题型:图论
题意:
在城镇间铺设铁路,要求用最短的铁路连接所有的城镇,最后输出道路中最长的那一段的长度。
分析:
直接用prime算法即可。
代码:
#include <vector>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <queue>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <string>
#include <cstring>
#include <cctype>
#include <assert.h>
using namespace std;
const int inf=999999;
int m;
int n,next,i,j,k,s,ans,dis,len;
int path[510][510],list[510];
int main(){
scanf("%d",&m);
while(m--){
scanf("%d",&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
path[i][j]=inf;
}
}
for(int i=1;i<=n;i++){
list[i]=inf;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&len);
if(path[i][j]>len){
path[i][j]=path[j][i]=len;
}
}
}
list[1]=0;
s=1;
ans=0;
while(1){
dis=inf;
next=-1;
for(int i=1;i<=n;i++){
list[i]=min(list[i],path[i][s]);
if(list[i]<dis&&list[i]!=0){
dis=list[i];
next=i;
}
}
if(next==-1) break;
ans=max(ans,dis);
s=next;
list[s]=0;
}
printf("%d\n",ans);
}
return 0;
}