zoukankan      html  css  js  c++  java
  • COGS 2. 旅行计划

    ★☆   输入文件:djs.in   输出文件:djs.out   简单对比
    时间限制:3 s   内存限制:128 MB

    过暑假了,阿杜准备出行旅游,他已经查到了某些城市的两两之间的距离及可行路线(可行路线有方向),如下图所示。请你编程计算从阿杜所住城市到其它城市的最短路径以帮助阿杜制定旅行计划。

    【输入格式】

    输入由若干行组成,第一行有三个整数,n1n100m1mn2v1mn;城市数,m城市间道路数,v是阿杜所住城市。第2m+1行是每条路的信息,每行三个整数,为道路的起点、终点和两城市间距离。(城市从0开始编号)

    【输出格式】

    n组(按城市编号由小至大),每组三行

    第一行:城市编号及一个冒号

    第二行:path及一个冒号,后面是最短路径节点编号序列(编号间用一个空格隔开)

    第三行:cost及一个冒号,后面是一个整数,表示路径距离

    如果没有通路则输出 no

    【输入样例】

    6 8 0
    0 2 10
    0 4 30
    0 5 100
    1 2 5
    2 3 50
    3 5 10
    4 3 20
    4 5 60

    【输出样例】

    0:
    no
    1:
    no
    2:
    path:0 2
    cost:10
    3:
    path:0 4 3
    cost:50
    4:
    path:0 4
    cost:30
    5:
    path:0 4 3 5
    cost:60

    floyd
    屠龙宝刀点击就送
    #include <cstring>
    #include <cstdio>
    
    #define Max 100
    #define min(a,b) a>b?b:a
    
    void qr(int &x)
    {
        x=0;bool f;
        char ch=getchar();
        while(ch>'9'||ch<'0')
        {
            if(ch=='-') f=1;
            ch=getchar();
        }
        while(ch>='0'&&ch<='9')
        {
            x=x*10+(int)ch-48;
            ch=getchar();
        }
        f?(~x+1):x;
    }
    int tx[Max*2][Max*2],cnt=0,path[Max*2][Max*2],n,m,v;
    void floyd()
    {
        for(int i=0;i<n;++i)
        {
            for(int j=0;j<n;++j)
            {
                for(int k=0;k<n;++k)
                {
                    if(tx[j][k]>tx[j][i]+tx[i][k])
                    {
                        tx[j][k]=tx[j][i]+tx[i][k];
                        path[j][k]=path[j][i];
                    }
                }
            }
        }
    }
    int main()
    {
        freopen("djs.in","r",stdin);
        freopen("djs.out","w",stdout); 
        scanf("%d%d%d",&n,&m,&v);
        for(int i=0;i<n;++i)
            for(int j=0;j<n;++j)
                path[i][j]=j,tx[i][j]=1e8;
        for(int x,y,z;m--;)
        {
            scanf("%d%d%d",&x,&y,&z);
            tx[x][y]=min(tx[x][y],z);
         }
        floyd();
        for(int i=0;i<n;++i)
        {
            printf("%d:
    ",i);int tmp=v;
            if(i==v)
            {
                printf("no
    ");
                continue;
            }
            else if(tx[v][i]==1e8)
            {
                printf("no
    ");
                continue;
            }
            else 
            {
                printf("path:");
                while(tmp!=i)
                {
                    printf("%d ",tmp);
                    tmp=path[tmp][i];
                }
                printf("%d
    cost:%d
    ",i,tx[v][i]);
            }
        }
        return 0;
    }
    我们都在命运之湖上荡舟划桨,波浪起伏着而我们无法逃脱孤航。但是假使我们迷失了方向,波浪将指引我们穿越另一天的曙光。
  • 相关阅读:
    C++ generic tools -- from C++ Standard Library
    18 12 18 给服务器添加logging 日志功能
    18 12 14 python提高 装饰器
    18 12 `12 WSGI 协议
    18 12 07 MySQL 与python 的交互
    转 SQL 的数据库 架构规范 之 58到家数据库30条军规解读
    18 12 06 sql 的 基本语句 查询 条件查询 逻辑运算符 模糊查询 范围查询 排序 聚合函数 分组 分页 连接查询 自关联 子查询
    18 12 4 SQL 的基本 语法
    clion 的 安装 变量配置的 搬运工(有点基础应该能看 大家看不懂 就是我自己看 哈哈哈哈哈哈)
    18 11 27 高级的服务器连接 epoll
  • 原文地址:https://www.cnblogs.com/ruojisun/p/6574422.html
Copyright © 2011-2022 走看看