解题代码
#include<stdio.h>
#define MAXN 100
#define Infinite 65534
int N, M;
int G[MAXN][MAXN];
void BuildGraph(void);
void FindAnimal(void);
int FindMax(int index);
void Floyd(void);
int main()
{
scanf("%d %d", &N, &M);
BuildGraph();
FindAnimal();
return 0;
}
void BuildGraph(void) {
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
G[i][j] = Infinite;
int v1, v2, w;
for (int i = 0; i < M; i++) {
scanf("%d %d %d", &v1, &v2, &w);
G[v1-1][v2-1] = G[v2-1][v1-1] = w;
}
}
void FindAnimal(void) {
int min = Infinite, max, index;
Floyd();
for (int i = 0; i < N; i++) {
max = FindMax(i);
if (max < min) {
min = max;
index = i;
}
}
if (min == Infinite) printf("0");
else printf("%d %d", index+1, min);
}
int FindMax(int index) {
int max = 0;
for (int i = 0; i < N; i++)
if (i != index && G[index][i] > max) max = G[index][i];
return max;
}
void Floyd(void) {
int i, j, k;
for (k = 0; k < N; k++)
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
if (G[i][k] + G[k][j] < G[i][j])
G[i][j] = G[i][k] + G[k][j];
}
测试结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a8118b12fc1475060ff8ca3550a987e2.png)
问题整理
1.这次忽略了题中的信息——所带的动物需要可以表示其他所有的动物。