MPI Maelstrom POJ - 1502 迪杰斯特拉 atoi()

读题时我真是崩溃了,本人现阶段英语 很差 ,根本就不知道什么意思。我感觉这是一道考英语水平的题(⊙﹏⊙)

题意

求起点到各点最短距离中的最大值(到每个点的最短距离,这些最短距离中找出最大的一个输出)

#include<iostream>
#include<cstring>
#include<cstdio>
#include <stdlib.h>
#define inf 0x3f3f3f3f
using namespace std;
int map[110][110],d[110];
int n;
bool v[110];
int main()
{
    scanf("%d",&n);
    char s[5];
    for(int i=1;i<=n;i++)
    {
        v[i]=0;
        map[i][i]=0;
    }
    for(int i=2;i<=n;i++)
    {
        for(int j=1;j<i;j++)
        {
            scanf("%s",s);
            int x;
            if(s[0]!='x')
            {
                x=atoi(s);
                map[i][j]=map[j][i]=x;
            }
            else
                map[i][j]=map[j][i]=inf;
        }
        getchar();    //吸收回车符
    }
    for(int i=1;i<=n;i++)
    {
        d[i]=map[1][i];
    }
    v[1]=1;
    int u,minn;
    for(int i=1;i<n;i++)
    {
        minn=inf;
        for(int j=1;j<=n;j++)
        {
            if(!v[j] && d[j]<minn)
                minn=d[u=j];
        }
        v[u]=1;
        for(int j=1;j<=n;j++)
        {
            if(map[u][j]<inf)
            {
                if(d[j]>d[u]+map[u][j])
                    d[j]=map[u][j]+d[u];
            }
        }
    }
    int m=-1;
    for(int i=2;i<=n;i++)
    {
        if(m<d[i])
            m=d[i];
    }
    printf("%d\n",m);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41837216/article/details/82704814