poj 1125 Floyed求任意2点最短路径

来源:互联网 发布:装潢艺术设计软件技能 编辑:程序博客网 时间:2024/06/10 13:14

题意参见:http://poj.org/bbs?problem_id=1125

Floyed算法使用注意k,i,j的顺序不能颠倒,否则发生错误。

#include <iostream>
#include <cstdio>
using namespace std;


int dis[105][105];
int MAX = 20;


void Floyd(int n)
{
    for(int k = 1;k<=n;k++)
    {
        for(int i = 1;i<=n;i++)
        {
            for(int j = 1;j<=n;j++)
            {
                if(dis[i][k]!=MAX&&dis[k][j]!=MAX&&dis[i][j] > dis[i][k]+dis[k][j])
                {
                    dis[i][j] = dis[i][k]+dis[k][j];
                }
            }
        }
    }
}


int main()
{
    int m;
    while(scanf("%d",&m)&&m!=0)
    {
        for(int i = 0;i<105;i++)
        {
            for(int j = 0;j<105;j++)
            {
                dis[i][j] = MAX;
            }
            dis[i][i] = 0;
        }
        for(int i = 1;i<=m;i++)
        {
            int num,x,y;
            scanf("%d",&num);
            for(int j = 0;j<num;j++)
            {
                scanf("%d %d",&x,&y);
                dis[i][x] = y;
            }
        }
        Floyd(m);
        int maxtime = 0;
        int record;
        int mintime = 20;
        bool flag;
        for(int i = 1;i<=m;i++)
            {
                maxtime = 0;
                flag = false;
                for(int j = 1;j<=m;j++)
                {
                    if(dis[i][j]==MAX)
                        {
                            flag = true;
                            break;
                        }
                    if(dis[i][j]>maxtime)
                        maxtime = dis[i][j];
                }
                if(flag==false)
                {
                    if(maxtime < mintime)
                    {
                        mintime = maxtime;
                        record = i;
                    }
                }
            }
        if(mintime == 20)
        {
            printf("disjoint\n");
        }
        else
        {
            printf("%d %d\n",record,mintime);
        }
    }
    return 0;
}

原创粉丝点击