设a、b、c、d、e、f表示一个乡的6个村庄,弧上的权值表 示两村之间的距离。现要在这6个村庄中选择一个村庄建一所医院,问医院建在哪个村庄 才能使离医院最远的村庄到医院的距离最短?
输入格式:
输入的第一行为村庄个数
输入的其他是多个存在组成网络的邻接矩阵表示
输出格式:
输出医院建立的位置
输入样例:
在这里给出一组输入。例如:
6
0 12 3 65535 9 10
12 0 65535 2 6 65535
3 65535 0 2 65535 6
65535 2 2 0 4 7
9 6 65535 4 0 4
10 65535 6 7 4 0
输出样例:
在这里给出相应的输出。例如:
c
AC代码:
用弗洛伊德处理一下就好了:
处理完之后,对每一个村庄进行讨论:
如果医院建在这里,离医院最远的村庄到医院的距离是多少,把结果存起来
从你得到的6个村庄的数据里找出最小的那一个,它就是答案:
#include<bits/stdc++.h>
using namespace std;
const int N = 200;
void solve()
{
}
int main(){
int n;
cin>>n;
int d[N][N];
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cin>>d[i][j];
}
}
for (int k = 0; k < n; ++k) {
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
d[i][j] = min(d[i][j],d[i][k]+d[k][j]);
}
}
}
int max1 = -1;
int min1 = 1e7;
for (int i = 0; i < n; ++i) {
max1 = -1;
for (int j = 0; j < n; ++j) {
max1 = max(max1,d[i][j]);
}
min1 = min(min1, max1);
}
for (int i = 0; i < n; ++i) {
max1 = -1;
for (int j = 0; j < n; ++j) {
max1 = max(max1,d[i][j]);
}
if (max1 == min1){
cout<<(char)('a'+i);
return 0;
}
}
}