• Poj(1125),Floyd,


    题目链接:http://poj.org/problem?id=1125

    多源点最短路中的,最长路的,最短路。 看到这里就懵逼了,解释一下,找到一个源点,使得路最短,(遍历源点),路最短怎么求呢? 就是找到从该源点出发,到达所有点中的最长的点的路径,就是他的最短路,然后根据n个源点,找到这样的最长路最短的,就行了。

    这里的具体Floyd算法,我还没推过,dis[i][j]从I到J的最短路。

    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    
    using namespace std;
    
    #define INF 0x3f3f3f3f
    
    int dis[105][105];
    int n;
    
    void floyd()
    {
        for(int k=1;k<=n;k++)
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                    dis[i][j] = min(dis[i][j],dis[i][k]+dis[k][j]);
    
        int minlength = INF;
        int flag = 0;
        for(int i=1;i<=n;i++)
        {
            int maxlength = 0;
            for(int j=1;j<=n;j++)
            {
                if(i!=j&&dis[i][j]>maxlength)
                    maxlength = dis[i][j];
            }
    
            if(minlength>maxlength)
            {
                minlength = maxlength;
                flag = i;
            }
        }
        if(flag)
            printf("%d %d
    ",flag,minlength);
        else printf("disjoint
    ");
    }
    
    int main()
    {
        while(scanf("%d",&n),n)
        {
            memset(dis,INF,sizeof(dis));
    
            for(int i=1; i<=n; i++)
            {
                int pairs;
                scanf("%d",&pairs);
                for(int j=1; j<=pairs; j++)
                {
                    int to,time;
                    scanf("%d%d",&to,&time);
                    dis[i][to] = time;
                }
            }
            floyd();
        }
        return 0;
    }
  • 相关阅读:
    团队项目-第一阶段冲刺-5
    用户场景分析
    第九周总结
    团队项目-第一阶段冲刺-3
    团队项目-第一阶段冲刺-2
    团队项目-第一阶段冲刺-1
    个人工作任务认领
    实验一:个人博客
    MFC onpaint() ondraw()
    MFC 虚函数与消息映射区别
  • 原文地址:https://www.cnblogs.com/TreeDream/p/5730449.html
Copyright © 2020-2023  润新知