思路:将输入的数据构成邻接矩阵后,利用Floyd算法(只有五行代码),得到所有结点到其他节点的距离,然后遍历所有结点,得到当前结点到其最远节点的距离,然后得到最大距离,并记录其下标。即是答案
#include<iostream>
#define Maxsize 101
#define INF 1000000
using namespace std;
int animal[Maxsize][Maxsize];
int N,M;
int main()
{
cin >> N >> M;
for (int i = 0; i <=N; i++) {
for (int j = 0; j <= N; j++) {
if (i == j) {
animal[i][j] = 0;
}
else {
animal[i][j] = INF;
}
}
}
for (int k = 0; k < M; k++) {
int i, j, length;
cin >> i >> j >> length;
animal[i][j] = animal[j][i] = length;
}
//核心代码Floyd算法
for (int k = 1; k <= N; k++) {
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
if (animal[i][j] > animal[i][k] + animal[k][j]) {
animal[i][j] = animal[i][k] + animal[k][j];
}
}
}
}
int index = 0;
int min = INF;
int max;
for (int i = 1; i <= N; i++) {
max = 0;
for (int j = 1; j <= N; j++) {
if (max <= animal[i][j]) {
max = animal[i][j];
}
}
if (min > max) {
min = max;
index = i;
}
}
//当有无法变成的动物时,max会等于INF
if (index == 0) {
cout <<"0"<< endl;
}
else {
cout << index << " " << min;
}
return 0;
}