floyd算法
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#include <string>
#include <iostream>
#include <stack>
#include <math.h>
#include <algorithm>
#include <iomanip>
#include <vector>
#include <map>
using namespace std;
#define IN 65535
int G[105][105];
int main()
{
int N,M;
cin>>N>>M;
memset(G,0,sizeof(G));
for(int i=1;i<=M;i++)
{
int a,b,c;
cin >> a >> b >> c;
G[a][b] = c;
G[b][a] = c;
}
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
{
if(G[i][j]==0)
G[i][j]=IN;
}
for(int k=1;k<=N;k++)
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
{
if(G[i][j]>G[i][k]+G[k][j])
{
G[i][j] = G[i][k]+G[k][j];
}
}
int Maxdis[N+1];
memset(Maxdis,0,sizeof(Maxdis));
for(int i=1;i<=N;i++)
{
int Max=0;
for(int j=1;j<=N;j++)
{
if(j!=i)
{
if(G[i][j]>Max)
Max=G[i][j];
}
else
continue;
}
Maxdis[i]=Max;
}
int Min=IN,MinNUM=1;
for(int i=1;i<=N;i++)
{
if(Maxdis[i]<Min)
{
Min=Maxdis[i];
MinNUM=i;
}
}
if(Min!=IN)
printf("%d %d\n",MinNUM,Min);
else
printf("0\n");
return 0;
}