zoukankan      html  css  js  c++  java
  • HDU_2112_最短路

    题目链接:http://acm.hdu.edu.cn/status.php?user=l1526789512&pid=2112&status=5

    HDU Today

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


    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 虽然偶尔会迷路,但是因为有了你的帮助 **和**从此还是过上了幸福的生活。 ――全剧终――
     
    思路:建图的时候略坑。建完图过后floyd和dijkstra。
    建图使用stl中的map。
    map<string,int> m;
    m.clear();  //清空
    可以有m[a]这种用法;
    m.begin();  //返回该map中第一个元素的迭代器
    m.end();  //返回该map中最后一个元素的迭代器
    m.find();  //若找到返回给元素的迭代器,否则返回最后一个元素的迭代器
    distance函数  //可通过两迭代器找下标
    更多关于map的东西还需继续学习。
     
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<map>
    using namespace std;
    #define INF 999999999
    
    int mapp[200][200],flag;
    int dist[200];
    int n;
    
    /*
    void floyd()
    {
        for(int k=0; k<flag; k++)
            for(int i=0; i<flag; i++)
                for(int j=0; j<flag; j++)
                    if(mapp[i][j]>mapp[i][k]+mapp[k][j])
                        mapp[i][j]=mapp[i][k]+mapp[k][j];
    }
    */
    
    void Dijkstra(int v0)
    {
        int S[200];
        for(int i=0; i<flag; i++)
        {
            dist[i]=mapp[v0][i];
            S[i]=0;
        }
        dist[v0]=0;
        S[v0]=1;
        for(int j=1; j<flag;j++)
        {
            int flag1=0;
            int mindist=INF;
            for(int i=0; i<flag; i++)
            {
                if(!S[i]&&dist[i]<mindist)
                {
                    mindist=dist[i];
                    flag1=i;
                }
            }
            S[flag1]=1;
            for(int i=0; i<flag;i++)
            {
                if(!S[i]&&mapp[flag1][i]<INF&&dist[i]>dist[flag1]+mapp[flag1][i])
                    dist[i]=dist[flag1]+mapp[flag1][i];
            }
        }
    }
    
    int main()
    {
        char a[50],b[50];
        int x,f;
        map<string ,int> m;
        while(scanf("%d",&n)!=EOF&&n!=-1)
        {
            f=0;
            m.clear();
            scanf("%s%s",a,b);
            if(strcmp(a,b)==0)
                f=1;
            m[a]=0;
            m[b]=1;
            flag=2;
            for(int i=0; i<170; i++)
            {
                dist[i]=INF;
                for(int j=0; j<170; j++)
                {
                    if(i==j)
                        mapp[i][j]=0;
                    else
                        mapp[i][j]=INF;
                }
            }
            for(int i=0; i<n; i++)
            {
                scanf("%s%s%d",a,b,&x);
                //cout<<a<<b<<x<<"*"<<endl;
                if(m.find(a)==m.end())
                    m[a]=flag++;
                if(m.find(b)==m.end())
                    m[b]=flag++;
                if(x<mapp[m[a]][m[b]])
                {
                    mapp[m[a]][m[b]]=x;
                    mapp[m[b]][m[a]]=x;
                }
            }
            if(f==1)
            {
                printf("0
    ");
                continue;
            }
            Dijkstra(0);
            if(dist[1]==INF)
                printf("-1
    ");
            else
                printf("%d
    ",dist[1]);
    
        }
        return 0;
    }
  • 相关阅读:
    数据库-第七章 数据库设计-7.4 逻辑结构设计
    ArrayList 一个面试题
    java 锁
    IDEA 通过插件jetty-maven-plugin使用 jetty
    Mybatis主线流程源码解析
    Springboot 报找不到对应的Mapper接口或RPC接口等问题
    Springboot启动报Multiple Dockets with the same group name are not supported. The following duplicate groups were discovered.
    Exception和Error有什么区别?
    谈谈对Java平台的理解笔记
    Spring事务控制
  • 原文地址:https://www.cnblogs.com/jasonlixuetao/p/5416462.html
Copyright © 2011-2022 走看看