POJ 1502 MPI Maelstrom 最短路dijkstra

 题意:求源点1到其它任意点的最小值 之中的最大值。

题意理解后,dijkstra水题

View Code
#include<stdio.h>
#include<string.h>
#define maxn 101
#define INF 100000000

int n, m;
int adj[maxn][maxn],dis[maxn];
int max;
bool vis[maxn];

int dijkstra(int v)
{
    int i,j,k,min,u;
    for(i=1;i<=n;i++)
    {
        dis[i]=adj[v][i];
        vis[i]=0;
    }
    vis[v]=1;dis[v]=0;
    for(i=1;i<n;i++)
    {
        min = INF;
        for(j=1;j<=n;j++)
        {
            if(min > dis[j]&&!vis[j])
            {
                min =dis[j];
                u = j;
            }
        }
        if(min == INF)break;
        vis[u]=1;
        for(j=1;j<=n;j++)
        {
            if(dis[u]+adj[u][j] < dis[j] &&!vis[j])
            {
                dis[j] = dis[u]+adj[u][j];
            }
        }
    }
    int max = dis[1];
    for(i=2;i<=n;i++)
    {
        if(max < dis[i])max=dis[i];
    }
    return max;
}
int main()
{
    int i ,j;
    char s[34];
    while(~scanf("%d",&n))
    {
        for(i=2;i<=n;i++)
        {
            for(j=1;j<i;j++)
            {
                scanf("%s",s);
                if(s[0]=='x')adj[i][j]=adj[j][i]=INF;
                else
                {
                    int len =strlen(s),k;
                    int sum=0;
                    for(k=0;k<len;k++)
                    sum= sum*10+s[k]-'0';
                    adj[i][j]=adj[j][i]=sum;
                }
            }
        }

        printf("%d\n",dijkstra(1));
    }
    return 0;
}

 

posted @ 2012-07-23 21:37  To be an ACMan  Views(169)  Comments(0)    收藏  举报