POJ1502-MPI Maelstrom-(单源最短路-Djsktra)

思路:要求最短时间从原点1到所有的点,先求到所有点的最短距离。
因为是可以同时 向各个方向出发,所以到达最远的那个点的时候,其他点已经到达了。
即求单源最短路径中的最长的那条路径值


#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<math.h>
#include<string>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;

int a[105][105];
int n;
int d[105];
bool used[105];

void djsktra()
{
    fill(d,d+n+1,inf);
    fill(used,used+n+1,false);
    //memset(d,inf,sizeof(d));
    //memset(used,false,sizeof(used));
    d[1]=0;

    int v;
    while(true)
    {
        v=-1;
        for(int u=1;u<=n;u++)
            if( !used[u] && (v==-1 || d[u]<d[v]) )
                v=u;
        if(v==-1) break;
        used[v]=true;
        for(int u=1;u<=n;u++)
            d[u]=min(d[u],d[v]+a[v][u]);
    }
    return;
}

int main()
{
    char s[10];
    while(scanf("%d",&n)!=EOF)
    {
        for(int i=1;i<=n;i++) a[i][i]=0;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<i;j++)
            {
                scanf("%s",s);
                if(s[0]!='x')
                    a[i][j]=a[j][i]=atoi(s);//把字符串转换成整型数,ASCII to integer 的缩写。
                else
                    a[i][j]=a[j][i]=inf;
            }
        }
        djsktra();

        int maxx=-1;
        for(int i=1;i<=n;i++)
            maxx=max(maxx,d[i]);
            printf("%d
",maxx);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/shoulinniao/p/10327911.html