【单源最短路】dijstra poj 1502

 

#include <cstdio>

#include <iostream>

#include <stdlib.h>

#include <memory.h>

using namespace std;

const int maxn=102;

const int inf=1<< 30;

int s[maxn][maxn],dis[maxn],visit[maxn],n;

void dijstra()

{

    memset(visit,0,sizeof(visit));

    for(int i=1;i<=n;i++)

    dis[i]=s[1][i];

    for(int j=1;j<=n;j++)

    {

        int t=-1;

        for(int i=1;i<=n;i++)

        {

            if(!visit[i] && (dis[i]<dis[t]||t==-1))

            t=i;

        }

        visit[t]=1;

        for(int i=1;i<=n;i++)

        {

            if(!visit[i] && s[i][t] && dis[i]>dis[t]+s[t][i])

            dis[i]=dis[t]+s[t][i];

        }

    }

}

int main()

{

    //freopen("in.txt","r",stdin);

    scanf("%d",&n);

    for(int i=1;i<=n;i++)

    s[i][i]=0;

    for(int i=1;i<=n;i++)

    {

        for(int j=1;j<=i-1;j++)

        {

            char ch[20];

            scanf("%s",ch);

            if(ch[0]=='x')s[j][i]=s[i][j]=inf;

            else s[i][j]=s[j][i]=atoi(ch);

        }

    }

    dijstra();

    int ans=-1;

    for(int i=1;i<=n;i++)

    {

        if(ans==-1 || dis[i]>ans)

        ans=dis[i];

    }

    printf("%d",ans);

    return 0;

}

 

你可能感兴趣的:(poj)