• hdoj 2112 HDU Today (最短路Dijkstra)


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112

    易错点:

    1)当起点等于终点时,hash会出错

    2)无向图

    3)两个点之间不只一条路径(取最短就好)

    4)没有通路的情况(输出-1)

    利用map哈希字符串,本题时限要求不高,Dijkstra就可以了

     1 #include<cmath>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<iostream>
     5 #include<algorithm>
     6 #include<string>
     7 #include<map>
     8 using namespace std;
     9 
    10 const int inf=0x3f3f3f3f;
    11 char s1[50],s2[50];
    12 int d[1005],e[1005][1005],used[1005];
    13 
    14 void dij(int s,int n)
    15 {    int v,u,max=0;
    16     memset(used,0,sizeof(used));
    17     for(u=1;u<=n;u++)
    18     d[u]=inf;
    19     
    20     d[s]=0;
    21 
    22 
    23     while(1)
    24     {    v=-1;
    25         for(u=1;u<=n;u++)
    26         {    if(!used[u]&&(v==-1||d[u]<d[v]))
    27             v=u;
    28             
    29         }
    30         if(v==-1) break;
    31         used[v]=1;
    32         
    33         for(u=1;u<=n;u++)
    34         if(d[u]>d[v]+e[v][u])
    35         d[u]=d[v]+e[v][u];
    36     }
    37 }
    38 
    39 int main()
    40 {
    41     int n;
    42     while(~scanf("%d",&n))
    43     {    if(n==-1) break;
    44         map <string,int> mp; 
    45         
    46         for(int i=0;i<=200;i++)
    47         for(int j=0;j<=200;j++)
    48         e[i][j]=inf;
    49         
    50         scanf("%s%s",s1,s2);
    51         mp[s1]=1;mp[s2]=2;
    52         if(strcmp(s1,s2)==0)
    53         {
    54             e[1][2]=0;
    55         }
    56         int num=2;
    57         for(int i=0;i<n;i++)
    58         {    int w;
    59             scanf("%s%s%d",s1,s2,&w);
    60             if(mp[s1]==0) mp[s1]=++num;
    61             if(mp[s2]==0) mp[s2]=++num;
    62             e[mp[s1]][mp[s2]]=min(e[mp[s1]][mp[s2]],w);
    63             e[mp[s2]][mp[s1]]=min(e[mp[s2]][mp[s1]],w);
    64         }
    65         dij(1,num);
    66         if(d[2]<2000000)
    67         printf("%d
    ",d[2]);
    68         else printf("-1
    ");
    69     }
    70 } 
  • 相关阅读:
    Envoy
    Redis 使用总结
    kafka(一)
    docker搭建kafka环境&&Golang生产和消费
    docker-composer +Grafana+Prometheus系统监控之Redis
    Docker基础命令
    connection pool exhausted
    golang 单元测试&&性能测试
    golang http 中间件
    golang 函数的特殊用法
  • 原文地址:https://www.cnblogs.com/lnu161403214/p/8379861.html
Copyright © 2020-2023  润新知