7-8 哈利·波特的考试 (25 分)

7-8 哈利·波特的考试 (25 分)

看懂题,比较简单。
用Floyd算法。
1、首先将数据读入,用来初始化图
2、用Floyd得到最短路径(各点到各点的全部最短路径)。
3、先求出每个点到其它点的最大路径,然后取最小值。
AC代码

#include <iostream>
using namespace std;
const int INFO = 100000;
struct MGraph{
    int Nv;
    int Ne;
    int G[100][100];
};
int book[100];
void Floyd(MGraph Graph,int D[][100]){
    int i,j,k;
    for(i=0;i<Graph.Nv;i++)
        for(j=0;j<Graph.Nv;j++)
            D[i][j] = Graph.G[i][j];
    for(k=0;k<Graph.Nv;k++)
        for(i=0;i<Graph.Nv;i++)
            for(j=0;j<Graph.Nv;j++)
                if(D[i][k] + D[k][j] < D[i][j])
                    D[i][j] = D[i][k] + D[k][j];
}
int main(){
    MGraph Graph;
    int V,W,Weight;
    int Max,MaxMin,index;
    int D[100][100];
    scanf("%d%d",&Graph.Nv,&Graph.Ne);
    //初始化
    for(int i = 0;i < Graph.Nv;i++){
        for(int j = 0;j < Graph.Nv;j++){
            if(i == j)
                Graph.G[i][j] = 0;
            else
                Graph.G[i][j] = INFO;
        }
    }
        
    for(int i=0;i<Graph.Ne;i++){
        scanf("%d%d%d",&V,&W,&Weight);
        Graph.G[V-1][W-1] = Weight;
        Graph.G[W-1][V-1] = Weight;
    }
    Floyd(Graph,D);
    MaxMin = INFO;
    for(int i=0;i<Graph.Nv;i++){
        Max = 0;
        for(int j=0;j<Graph.Nv;j++){
           if(D[i][j] > Max)
                Max = D[i][j];
        }
        if(MaxMin > Max){
            MaxMin = Max;
            index = i;
        } 
    }
    if(MaxMin == INFO) printf("0\n");
    else printf("%d %d\n",index+1,MaxMin);
    system("pause");
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值