HDU2112-HDU Today

http://acm.hdu.edu.cn/showproblem.php?pid=2112

字符串处理下,以前不会用find函数就自写了个 - -。。。

 

#include<stdio.h>
#include<string.h>
#define INF 0xfffffff
#define N 600
int map[N][N],vis[N],dis[N],m,min;
char name[N][32];
int find(char str[32])
{
    int i;
    for(i=1;i<=m;i++)
    {
        if(strcmp(name[i],str)==0)
           return i;
    }
    if(m==0||i>m)
    {
        m++;
        strcpy(name[m],str);
        return m;
    }
}
void dijkstra(int s,int e)
{
    int i,j,k;
    memset(vis,0,sizeof(vis));
    for(i=1;i<=m;i++)
       dis[i]=map[s][i];
    vis[s]=1;
    dis[s]=0;
    for(i=1;i<=m-1;i++)
    {
        min=INF;
        for(j=1;j<=m;j++)
           if(!vis[j]&&dis[j]<min)
           {
                  min=dis[j];
                  k=j;
           }
        if(min==INF)
           break;   
        vis[k]=1;
        for(j=1;j<=m;j++)
           if(!vis[j]&&dis[j]>dis[k]+map[k][j])
              dis[j]=dis[k]+map[k][j];
    }
    if(dis[e]!=INF)
       printf("%d\n",dis[e]);
    else
       printf("-1\n");
}
int main(void)
{
    int T,i,j,a,b,c,s,e;
    char start[32],end[32],s1[32],s2[32];
    while(scanf("%d",&T)!=EOF)
    {
        if(T==-1)
           break;
        m=0;
        for(i=1;i<=N;i++)
           for(j=1;j<=N;j++)
              map[i][j]=INF;
        scanf("%s %s",start,end);
        for(i=1;i<=T;i++)
        {
            scanf("%s %s %d",s1,s2,&c);
            a=find(s1);
            b=find(s2);
            if(map[a][b]>c)
               map[a][b]=map[b][a]=c;
        }
        s=find(start);
        e=find(end);
        if(s==e)
           printf("0\n");
        else   
           dijkstra(s,e);
    }
    return 0;
}
posted @ 2012-08-30 18:04  Yogurt Shen  阅读(134)  评论(0编辑  收藏  举报