多源最短路径问题
使用Floyd算法求解
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=105;
const int INF = 1e9;
int n,m;
int dis[maxn][maxn];
void Floyd(){
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(dis[i][k]!=INF && dis[k][j]!=INF && dis[i][k] + dis[k][j] < dis[i][j]){
dis[i][j] = dis[i][k] + dis[k][j];
}
}
}
}
}
int main(){
int u,v,length;
fill(dis[0],dis[0]+maxn*maxn,INF);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){ //顶点i到顶点i的距离初始化为0
dis[i][i]=0;
}
for(int i=0;i<m;i++){
scanf("%d%d%d",&u,&v,&length);
dis[u][v]=length;
dis[v][u]=length; //无向边
}
Floyd();
int animal=-1;
for(int i=1;i<=n;i++){
int maxt=-1;
for(int j=1;j<=n;j++){
if(dis[i][j] > maxt){
maxt=dis[i][j];
}
}
dis[i][0]=maxt;
}
int Min=INF;
for(int i=1;i<=n;i++){
if(dis[i][0] < Min){
Min = dis[i][0];
animal=i;
}
}
if(Min==INF) printf("0\n");
else printf("%d %d\n",animal,Min);
return 0;
}