HDU 2112 Map+Dijkstra

 Map+Dijksrta

#include<stdio.h>
#include<iostream>
#include<cstdio>
#include<string.h>
#include<map>
#include<string>
#define M 10000000
#define m 10005
#define mb 199
using namespace std;
int n,dis[mb],vis[mb],ma[mb][mb],i,j,k,mi,c,t,l;
char s1[mb],s2[mb],s3[mb],s4[mb];
int main()
{
    while(scanf("%d",&n)!=EOF&&n!=-1)
    {
          l=1;
        map<string,int>df;
        for(i=0;i<mb;i++)
         {for(j=0;j<mb;++j)
            { ma[i][j]=M;}}
            scanf("%s%s",s3,s4);
           df[s3]=l;
           l++;
        for(i=0;i<n;++i)
        {
            scanf("%s%s%d",s1,s2,&t);
            if(df[s1]==0)
              {j=df[s1]=l++;}
            else
              {j=df[s1];}
              if(df[s2]==0)
                  {k=df[s2]=l++;}
              else
                {k=df[s2];}
            if(ma[j][k]>t)
              {ma[j][k]=ma[k][j]=t;}
        }
          memset(vis,0,sizeof(vis));
         for(i=1;i<l;++i){dis[i]=M;}
            dis[df[s3]]=0;
         for(i=0;i<=l;i++)
          {
              mi=M;
                k=-1;
            for(j=1;j<l;j++)
              {if(!vis[j]&&mi>dis[j])
                  {mi=dis[j];k=j;}}
            if(mi==M)break;
            vis[k]=1;
            for(j=1;j<l;++j)
            {if(!vis[j]&&dis[j]>dis[k]+ma[k][j])
                {dis[j]=dis[k]+ma[k][j];}
            }
            
        }
        if(df[s4]==0||dis[df[s4]]==M)
             {printf("-1\n");}
        else
          printf("%d\n",dis[df[s4]]); 
        df.clear();
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值