POJ 2263 Heavy Cargo 最短路dijkstra

字符串处理+dijkstra修改一下

View Code
#include<stdio.h>
#include<string.h>
#define maxn 201

int n,m,num;
int dis[maxn],adj[maxn][maxn];
bool vis[maxn];
int MIN(int a ,int b)
{
    return a < b ? a : b;
}
int MAX(int a, int b)
{
    return a > b ? a :b;
}
char str[201][35],s[35];
int find()
{
    int i;
    for(i=0;i<num;i++)
    {
        if(strcmp(str[i],s)==0)return i;
    }
    strcpy(str[num++],s);
    return num-1;
}
int dijkstra(int v, int e)
{
    int i ,j ,k, u, max;
    for(i=0;i<n;i++)
    {
        dis[i]=adj[v][i];
        vis[i]=0;
    }
    vis[v]=1;dis[v]=0;
    for(i=0;i<n-1;i++)
    {
        max = -1;
        for(j=0;j<n;j++)
        {
            if(max < dis[j]&&!vis[j])
            {
                max = dis[j];
                u = j;
            }
        }
        if(max == -1)break;
        vis[u]=1;
        for(j=0;j<n;j++)
        {
            if(!vis[j]&&adj[u][j]>-1)
            {
                dis[j]=MAX(MIN(dis[u],adj[u][j]),dis[j]);
            }
        }
    }
    return dis[e];
}
int main()
{
    int i,j,x,y,w,X=1;
    while(~scanf("%d%d",&n,&m)&&n)
    {
        num=0;
        memset(str,0,sizeof(str));
        for(i=0;i<=n;i++)
        {
            for(j=0;j<=n;j++)
            {
                adj[i][j]= -1;
            }
        }
        while(m--)
        {
            scanf("%s",s);
            x=find();
            scanf("%s",s);
            y=find();
            scanf("%d",&w);
            if(adj[x][y] < w)
            {
                adj[x][y]=w;
                adj[y][x]=w;
            }
        }
        scanf("%s",s);int ss=find();
        scanf("%s",s);int t=find();
        printf("Scenario #%d\n%d tons\n\n",X++,dijkstra(ss,t));
    }
    return 0;
}

 

posted @ 2012-07-24 18:52  To be an ACMan  Views(203)  Comments(0)    收藏  举报