解题代码
#include<stdio.h>
#define MAXN 100
#define Infinite 65536
int Edge[MAXN][MAXN];
int N;
typedef enum { false, true } bool;
void Initialization(void);
void Floyd(void);
void FindAnimal(void);
int Findmax(int i);
int main()
{
int M, i, x, y, length;
scanf("%d %d", &N, &M);
Initialization();
for (i = 0; i < M; i++) {
scanf("%d %d %d", &x, &y, &length);
Edge[x - 1][y - 1] = Edge[y - 1][x - 1] = length;
}
Floyd();
FindAnimal();
return 0;
}
void Initialization(void) {
int i, j;
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
Edge[i][j] = Infinite;
}
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 (Edge[i][k] + Edge[k][j] < Edge[i][j])
Edge[i][j] = Edge[i][k] + Edge[k][j];
}
void FindAnimal(void) {
int max, min, i, index;
min = Infinite; max = 0;
for (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 i) {
int j, max=0;
for (j = 0; j < N; j++)
if (j != i&&Edge[i][j] > max) max = Edge[i][j];
return max;
}
测试结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/202005051218492.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FydWFzZw==,size_16,color_FFFFFF,t_70)
问题整理
1.基础题。