07-图4 哈利·波特的考试

思路:将输入的数据构成邻接矩阵后,利用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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值