0
点赞
收藏
分享

微信扫一扫

数据结构与算法题目集(中文) - 7-8 哈利·波特的考试(25 分)


题目链接:​​点击打开链接​​

题目大意:

解题思路:Floyd

AC 代码

#include<bits/stdc++.h>
#include<cmath>

#define mem(a,b) memset(a,b,sizeof a);
#define INF 0x3f3f3f3f

using namespace std;

typedef long long ll;
const int maxn=105;
int lens[maxn][maxn];

int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
mem(lens,INF);
for(int i=0;i<m;i++)
{
int u,v,w; scanf("%d%d%d",&u,&v,&w);
lens[u][v]=lens[v][u]=w;
}

for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(lens[i][j]>lens[i][k]+lens[k][j])
lens[i][j]=lens[i][k]+lens[k][j];

int MAX=INF,idx;
for(int i=1;i<=n;i++)
{
int max=0;
for(int j=1;j<=n;j++)
{
if(j==i) continue;
if(lens[j][i]>max) max=lens[j][i]; // 统计每个点的最大需要的长度
}

if(max<MAX) MAX=max,idx=i; // 统计最佳 i 点的在那么多最大长度中,最小的那一个长度 max
}

if(MAX>=INF) puts("0");
else printf("%d %d\n",idx,MAX);
}

return 0;
}


举报

相关推荐

0 条评论