zoukankan      html  css  js  c++  java
  • SDUT 3363 数据结构实验之图论七:驴友计划

     

    数据结构实验之图论七:驴友计划

    Time Limit: 1000 ms Memory Limit: 65536 KiB

    Problem Description

    做为一个资深驴友,小新有一张珍藏的自驾游线路图,图上详细的标注了全国各个城市之间的高速公路距离和公路收费情况,现在请你编写一个程序,找出一条出发地到目的地之间的最短路径,如果有多条路径最短,则输出过路费最少的一条路径。

    Input

    连续T组数据输入,每组输入数据的第一行给出四个正整数N,M,s,d,其中N(2 <= N <= 500)是城市数目,城市编号从0~N-1,M是城市间高速公路的条数,s是出发地的城市编号,d是目的地的城市编号;随后M行,每行给出一条高速公路的信息,表示城市1、城市2、高速公路长度、收费额,中间以空格间隔,数字均为整数且不超过500,输入数据均保证有解。 

    Output

    在同一行中输出路径长度和收费总额,数据间用空格间隔。 

    Sample Input

    1
    4 5 0 3
    0 1 1 20
    1 3 2 30
    0 3 4 10
    0 2 2 20
    2 3 1 20

    Sample Output

    3 40

    提示:本题为有向图的最短路径求解,可以用到floyd算法找最短路径关于floyd算法以后会写到。

    代码实现如下(g++):
    #include<bits/stdc++.h>
    #define INF 0x3f3f3f3f
    
    using namespace std;
    
    int Map[1010][1010];
    int lowcost[1010][1010];
    
    int n,m;
    
    void Floyd()//Floyd算法
    {
        for(int k=0; k<n; k++)
        {
            for(int i=0; i<n; i++)
            {
                for(int j=0; j<n; j++)
                {
                    if(i != j)
                    {
                        if(Map[i][j]>Map[i][k]+Map[k][j])
                        {
                            Map[i][j] = Map[i][k] + Map[k][j];
                            lowcost[i][j]=lowcost[i][k]+lowcost[k][j];
                        }
                        if(Map[i][j]==Map[i][k]+Map[k][j])
                        {
                            if(lowcost[i][j]>lowcost[i][k]+lowcost[k][j])
                                lowcost[i][j]=lowcost[i][k]+lowcost[k][j];
                        }
                    }
    
                }
            }
        }
    }
    
    int main()
    {
        int t,u,v,l,q,s,d;
        scanf("%d",&t);
        while(t--)
        {
            memset(Map,INF,sizeof(Map));
            memset(lowcost,INF,sizeof(lowcost));
            scanf("%d %d %d %d",&n,&m,&s,&d);
            for(int i=0; i<m; i++)
            {
                scanf("%d %d %d %d",&u,&v,&l,&q);
                Map[u][v]=Map[v][u]=l;
                lowcost[u][v]=lowcost[v][u]=q;
            }
            Floyd();
            printf("%d %d
    ",Map[s][d],lowcost[s][d]);
        }
        return 0;
    }
    
    
    /***************************************************
    Result: Accepted
    Take time: 0ms
    Take Memory: 2028KB
    ****************************************************/
  • 相关阅读:
    ajax提交请求返回对象异常问题
    Rhino+envjs-1.2.js 在java运行网站js 工具类
    CryptoJS遇到的小坑
    BT是如何下载的
    NPOI 复制Word中的表格内容, 操作Word表格
    使用Scapy框架进行PPPOE拨号密码截取
    用Python养一只DHT爬虫
    如何解决jquery版本冲突
    安装ECMall后报PHP Strict Standards错误,请问如何解决
    如何在Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作(远程开发)
  • 原文地址:https://www.cnblogs.com/jkxsz2333/p/9506635.html
Copyright © 2011-2022 走看看