zoukankan      html  css  js  c++  java
  • 兔子与樱花

    总时间限制: 
    1000ms
     
    内存限制: 
    65535kB
    描述

    很久很久之前,森林里住着一群兔子。有一天,兔子们希望去赏樱花,但当他们到了上野公园门口却忘记了带地图。现在兔子们想求助于你来帮他们找到公园里的最短路。

    输入
    输入分为三个部分。
    第一个部分有P+1行(P<30),第一行为一个整数P,之后的P行表示上野公园的地点。
    第二个部分有Q+1行(Q<50),第一行为一个整数Q,之后的Q行每行分别为两个字符串与一个整数,表示这两点有直线的道路,并显示二者之间的矩离(单位为米)。
    第三个部分有R+1行(R<20),第一行为一个整数R,之后的R行每行为两个字符串,表示需要求的路线。
    输出
    输出有R行,分别表示每个路线最短的走法。其中两个点之间,用->(矩离)->相隔。
    样例输入
    6
    Ginza
    Sensouji
    Shinjukugyoen
    Uenokouen
    Yoyogikouen
    Meijishinguu
    6
    Ginza Sensouji 80
    Shinjukugyoen Sensouji 40
    Ginza Uenokouen 35
    Uenokouen Shinjukugyoen 85
    Sensouji Meijishinguu 60
    Meijishinguu Yoyogikouen 35
    2
    Uenokouen Yoyogikouen
    Meijishinguu Meijishinguu

    样例输出

    Uenokouen->(35)->Ginza->(80)->Sensouji->(60)->Meijishinguu->(35)->Yoyogikouen
    Meijishinguu

    代码

    #include <string>
    #include <vector>
    #include <cstring>
    #include <iostream>
    #include <stack>
    using namespace std;
    string buf[32];
    int dis[32];
    int pre[32];
    int value[32];
    bool visit[32];
    int p,q,r;
    struct Edge{
        int to;
        int cost;
        Edge(){}
        Edge(int t,int c){
            to = t;cost = c;
        }
    };
    vector<Edge> graph[32];
    int find(string s){
        for(int i = 0;i < p;i++)
            if(buf[i] == s)return i;
    }
    void findPath(int s,int t){
        int save = t;
        stack<int> st;
        stack<int> st2;
        while(t != s){
            st.push(pre[t]);
            st2.push(value[t]);
            t = pre[t];
        }
        string base= "->";
        while(!st.empty()){
            int temp = st.top();
            cout<<buf[temp]<<base<<'('<<st2.top()<<')'<<base;
            st.pop();
            st2.pop();
        }
    
        cout<<buf[save]<<endl;
    
    
    }
    void Dijstra(int s){
        for(int i = 0;i < p;i++){
            dis[i] = -1;
            visit[i] = false;
            pre[i] = -1;
        }
        dis[s] = 0;
        visit[s] = 1;
        int newP = s;
        for(int i = 1;i < p;i++){
            int size = graph[newP].size();
            for(int j = 0;j < size;j++){
                int to = graph[newP][j].to;
                int v = graph[newP][j].cost;
                if(visit[to])continue;
                if(dis[to] == -1 || dis[newP] + v < dis[to]){
                    dis[to] = dis[newP] + v ;
                    pre[to] = newP;
                    //printf("pre[%d] %d
    ",to,newP);
                    value[to] = v;
                }
            }
            int min = 0x3f3f3f;
            for(int j = 0;j < p;j++){
                if(dis[j] == -1 || visit[j])continue;
                if(min > dis[j]){
                    min = dis[j];
                    newP = j;
                }
            }
            visit[newP] = 1;
            //printf("newP:%d
    ",newP);
        }
    
    }
    int main(){
        cin>>p;
        for(int i = 0;i < p;i++){
            cin>>buf[i];
        }
        cin>>q;
        for(int i = 0;i < q;i++){
            string from,to;
            int d,t1,t2;
            cin>>from>>to>>d;
            t1 = find(from);
            t2 = find(to);
            Edge e;
            e.to = t2;e.cost = d;
            graph[t1].push_back(e);
            e.to = t1;
            graph[t2].push_back(e);
        }
        cin>>r;
        for(int i = 0;i < r;i++){
            string ss,tt;
            cin>>ss>>tt;
            int s,t;
            s = find(ss);t = find(tt);
            Dijstra(s);
            findPath(s,t);
        }
    }
  • 相关阅读:
    centos7以yum方式安装zabbix-agent客户端服务
    centos7搭建nexus maven私服
    pyinstaller打包python项目为windows运行exe程序
    nginx 查看安装的模块以及安装新模块
    securecrt终端显示乱码问题
    利用Anemometer做mysql慢日志的查询与可视化
    centos7安装kubernetes1.18.5
    k8s执行kubectl相关命令报错:Unable to connect to the server: x509
    postman接口测试10_导入curl请求接口
    app测试04_app性能测试之perfdog
  • 原文地址:https://www.cnblogs.com/starryxsky/p/7143166.html
Copyright © 2011-2022 走看看