• hdu2112HDU Today(floyd+map数组对字符串的应用)


    HDU Today

    Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 38420    Accepted Submission(s): 9298


    Problem Description
    经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强。这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市浬浦镇陶姚村买了个房子,开始安度晚年了。
    这样住了一段时间,徐总对当地的交通还是不太了解。有时很郁闷,想去一个地方又不知道应该乘什么公交车,在什么地方转车,在什么地方下车(其实徐总自己有车,却一定要与民同乐,这就是徐总的性格)。
    徐总经常会问蹩脚的英文问路:“Can you help me?”。看着他那迷茫而又无助的眼神,热心的你能帮帮他吗?
    请帮助他用最短的时间到达目的地(假设每一路公交车都只在起点站和终点站停,而且随时都会开)。
     
    Input
    输入数据有多组,每组的第一行是公交车的总数N(0<=N<=10000);
    第二行有徐总的所在地start,他的目的地end;
    接着有n行,每行有站名s,站名e,以及从s到e的时间整数t(0<t<100)(每个地名是一个长度不超过30的字符串)。
    note:一组数据中地名数不会超过150个。
    如果N==-1,表示输入结束。
     
    Output
    如果徐总能到达目的地,输出最短的时间;否则,输出“-1”。
     
    Sample Input
    6
    xiasha westlake
    xiasha station 60
    xiasha ShoppingCenterofHangZhou 30
    station westlake 20
    ShoppingCenterofHangZhou supermarket 10
    xiasha supermarket 50
    supermarket westlake 10
    -1
     
    Sample Output
    50 Hint: The best route is:
    xiasha->ShoppingCenterofHangZhou->supermarket->westlake
    虽然偶尔会迷路,但是因为有了你的帮助 **和**从此还是过上了幸福的生活。 ――全剧终――

    题意:乘公交车,地点双向。给出起点和终点。还有每两个城市之间的行车距离,要求计算从起点到终点的最短时间。

    题解:因为城市的数量最多只有150,所以可以用floyd算法。这题最关键的是他的地点是字符串,而不是编号,我们可以用map数组把字符串作为下标,给他赋一个编号。这样就和一般的一样了。要特判一下如果起点和终点重合,时间就是0。如果不能从给出的起点到终点,就输出-1。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 map<string,int>s;
     4 char a[35],b[35];
     5 int road[155][155];
     6 const int inf=0x3f3f3f3f;
     7 int n;
     8 void floyd() {
     9     for(int k=1; k<=152; k++) {
    10         for(int i=1; i<=152; i++) {
    11             for(int j=1; j<=152; j++) {
    12                 road[i][j]=min(road[i][j],road[i][k]+road[k][j]);
    13             }
    14         }
    15     }
    16 }
    17 int main() {
    18 
    19     while(~scanf("%d",&n)&&n!=-1) {
    20         s.clear();//初始化
    21         for(int i=0; i<155; i++) { 
    22             for(int j=0; j<155; j++) {
    23                 road[i][j]=inf;
    24             }
    25             road[i][i]=0;
    26         }
    27         scanf("%s %s",a,b);
    28         int r=0;
    29         if(!strcmp(a,b))r=1;//如果起点和终点相同 
    30         s[a]=1;
    31         s[b]=2;
    32         int ans=3;
    33         int t;
    34         for(int i=0; i<n; i++) {
    35             scanf("%s %s %d",a,b,&t);
    36             if(!s[a])s[a]=ans++;//如果map里面没有这个字符串,就给该字符串一个新的编号 
    37             if(!s[b])s[b]=ans++;
    38             if(t<road[s[a]][s[b]]) {
    39                 road[s[a]][s[b]]=road[s[b]][s[a]]=t;
    40             }
    41         }
    42         floyd();
    43         if(r)printf("0
    ");
    44         else if(road[1][2]==inf)printf("-1
    ");
    45         else printf("%d
    ",road[1][2]);
    46     }
    47     return 0;
    48 }
  • 相关阅读:
    Prometheus实现微信邮件钉钉报警
    产品需求文档和原型
    各类数据集
    redis与mysql数据同步
    hadoop hbase hive spark对应版本
    Redis集群的搭建
    mysql数据库数据与redis同步
    企业级Zabbix监控实战(一)
    mysql实现高可用架构之MHA
    04-爬取单个英雄联盟英雄的符文图片
  • 原文地址:https://www.cnblogs.com/fqfzs/p/9893078.html
Copyright © 2020-2023  润新知