• poj1125--Floyd


    题解:

           有N个股票经济人能够互相传递消息。他们之间存在一些单向的通信路径。如今有一个消息要由某个人開始传递给其它全部人。问应该由哪一个人来传递,才干在最短时间内让全部人都接收到消息。

           显然,用Floyd算法,然后选出每一个点到其它点的最长距离其中的最短距离。


    /** rief poj 1125 Floyd
     *
     * param date 2014/7/31
     * param state AC
     * 
    eturn memory 756k time 0ms
     *
     */
    
    #include <iostream>
    #include <fstream>
    #include <cstring>
    
    using namespace std;
    
    const int MAXN=101;
    int DistMap[MAXN][MAXN];
    int n;
    const int INF=20;
    //int best;
    //int num;
    
    //bool Floyd()
    void Floyd()
    {
        for(int k=1;k<=n;k++)
        {
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=n;j++)
                {
                    if(i!=j && DistMap[i][j]>DistMap[i][k]+DistMap[k][j])
                        DistMap[i][j]=DistMap[i][k]+DistMap[k][j];
                }
            }
        }
        //
        int maxlength, min_in_max=INF,flag_source;
        for(int i=1;i<=n;i++)//以i点作为各通路源点
        {
            maxlength=0;
            for(int j=1;j<=n;j++)
            {
                if(i!=j && DistMap[i][j]>maxlength)//寻找i到j的最长路径
                {
                    maxlength=DistMap[i][j];
                }
            }
            if(min_in_max>maxlength)
            {
                min_in_max=maxlength;//寻找最长路径中的最短路
                flag_source=i;
            }
        }
    
        /*Output*/
        if(min_in_max<INF)
            cout<<flag_source<<' '<<min_in_max<<endl;
        else
            cout<<"disjoint"<<endl;
    }
    
    int main()
    {
        //cout << "Hello world!" << endl;
        //freopen("input.txt","r",stdin);
        while(scanf("%d",&n)!=EOF)
        {
            memset(DistMap,INF,sizeof(DistMap));
            if(n==0)break;
            int num,v,w;
            for(int i=1;i<=n;i++)
            {
                cin>>num;
                for(int j=0;j<num;j++)
                {
                    //DistMap[][]
                    scanf("%d%d",&v,&w);
                    DistMap[i][v]=w;
                }
            }
            //Floyd
            //if(Floyd()==false)
            //    cout<<"disjoint"<<endl;
            //else cout<<num<<" "<<best<<endl;
            Floyd();
        }
        return 0;
    }
    


  • 相关阅读:
    java里的分支语句--程序运行流程的分类(顺序结构,分支结构,循环结构)
    Java里的构造函数(构造方法)
    Java里this的作用和用法
    JAVA中的重载和重写
    从键盘接收字符类型的数据并实现剪刀石头布的规则
    使用Notepad++编码编译时报错(已解决?)
    云就是网络,云计算呢
    使用JavaMail创建邮件和发送邮件
    mysql锁机制
    java中几种常用的设计模式
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7145395.html
Copyright © 2020-2023  润新知