弗洛伊德算法吧。核心代码就四行。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#define INF 0x3f3f3f3f;
using namespace std;
int N,M;
int mp[110][110];
void init(){
for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++){
if(i==j) mp[i][j]=0;
else mp[i][j]=INF;
}
}
}
int main(){
int a,b,c;
scanf("%d%d",&N,&M);
init();
for(int i=1;i<=M;i++){
scanf("%d%d%d",&a,&b,&c);
mp[a][b]=c;
mp[b][a]=c;
}
int maxn=-1,minv=0,minw=INF;
for(int k=1;k<=N;k++)
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
mp[i][j]=min(mp[i][j],mp[i][k]+mp[k][j]);
for(int i=1;i<=N;i++){
maxn=0;
for(int j=1;j<=N;j++){
if(maxn<mp[i][j])
maxn=mp[i][j];
}
if(minw>maxn){
minw=maxn;
minv=i;
}
}
if(minv!=0)
cout<<minv<<" "<<minw<<endl;
else printf("0\n");
return 0;
}