多源最短路径问题
使用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;
}