06-图5. 旅游规划(25)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard

有了一张自驾旅游路线图,你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。

输入格式说明:

输入说明:输入数据的第1行给出4个正整数N、M、S、D,其中N(2<=N<=500)是城市的个数,顺便假设城市的编号为0~(N-1);M是高速公路的条数;S是出发地的城市编号;D是目的地的城市编号。随后的M行中,每行给出一条高速公路的信息,分别是:城市1、城市2、高速公路长度、收费额,中间用空格分开,数字均为整数且不超过500。输入保证解的存在。

输出格式说明:

在一行里输出路径的长度和收费总额,数字间以空格分隔,输出结尾不能有多余空格。

样例输入与输出:

序号 输入 输出
1
  1. 4 5 0 3
  2. 0 1 1 20
  3. 1 3 2 30
  4. 0 3 4 10
  5. 0 2 2 20
  6. 2 3 1 20
  1. 3 40
2
  1. 2 1 0 1
  2. 1 0 2 3
  1. 2 3

提交代码

方法一:邻接矩阵,时间复杂度O(N^2)

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<iostream>
  4. #include<cstring>
  5. #include<queue>
  6. #include<vector>
  7. #include<cmath>
  8. #include<string>
  9. using namespace std;
  10. #define inf 260000
  11. struct node{
  12. int dist,cost;
  13. };
  14. node Map[][];
  15. int dist[],cost[],n,m,s,d;
  16. int main(){
  17. //freopen("D:\\INPUT.txt","r",stdin);
  18. scanf("%d %d %d %d",&n,&m,&s,&d);
  19.  
  20. //cout<<n<<" "<<m<<" "<<s<<" "<<d<<endl;
  21.  
  22. int i,j,a,b,dis,cos;
  23. for(i=;i<n;i++){//初始化
  24. dist[i]=inf;
  25. cost[i]=inf;
  26. for(j=;j<n;j++){
  27. Map[i][j].dist=Map[j][i].dist=inf;
  28. Map[i][j].cost=Map[j][i].cost=inf;
  29. }
  30. }
  31. for(i=;i<m;i++){
  32. scanf("%d %d %d %d",&a,&b,&dis,&cos);
  33. Map[a][b].cost=Map[b][a].cost=cos;
  34. Map[a][b].dist=Map[b][a].dist=dis;
  35.  
  36. //cout<<a<<" "<<b<<" "<<cos<<" "<<dis<<endl;
  37.  
  38. }
  39. int cur=s,mindist=inf,mincost=inf,minnum;
  40. dist[s]=cost[s]=;
  41. while(cur!=d){
  42.  
  43. //cout<<dist[cur]<<endl;
  44.  
  45. for(i=;i<n;i++){
  46. if(dist[i]>dist[cur]+Map[cur][i].dist){
  47. dist[i]=dist[cur]+Map[cur][i].dist;
  48. cost[i]=cost[cur]+Map[cur][i].cost;
  49. }
  50. else{
  51. if(dist[i]==dist[cur]+Map[cur][i].dist&&cost[i]>cost[cur]+Map[cur][i].cost){
  52. cost[i]=cost[cur]+Map[cur][i].cost;
  53. }
  54. }
  55. }
  56. dist[cur]=cost[cur]=;//入队
  57. mindist=inf,mincost=inf;
  58. for(i=;i<n;i++){//find min
  59. if(dist[i]){
  60. if(mindist>dist[i]){
  61. mindist=dist[i];
  62. mincost=cost[i];
  63. minnum=i;
  64. }
  65. else{
  66. if(mindist==dist[i]&&mincost>cost[i]){
  67. mincost=cost[i];
  68. minnum=i;
  69. }
  70. }
  71. }
  72. }
  73. cur=minnum;
  74. }
  75. printf("%d %d\n",dist[d],cost[d]);
  76. return ;
  77. }

pat06-图5. 旅游规划(25)的更多相关文章

  1. 【(图) 旅游规划 (25 分)】【Dijkstra算法】

    #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> us ...

  2. PTA 7-10(图) 旅游规划 最短路问题

    7-10(图) 旅游规划 (25 分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果 ...

  3. PTA 07-图6 旅游规划 (25分)

    题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/717 5-9 旅游规划   (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路 ...

  4. PAT 07-图6 旅游规划 (25分)

    有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路径都是最短的,那么需要输出最便 ...

  5. PTA 旅游规划(25 分)

    7-10 旅游规划(25 分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条 ...

  6. ACM程序设计选修课——Problem F:(ds:图)旅游规划(优先队列+SPFA)

    问题 F: (ds:图)旅游规划 时间限制: 1 Sec  内存限制: 128 MB 提交: 14  解决: 4 题目描述 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路 ...

  7. 7-9 旅游规划(25 分)(Dijkstra最短路径算法)

    有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路径都是最短的,那么需要输出最便 ...

  8. 7-36 旅游规划 (25 分(Dijkstra)

    有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路径都是最短的,那么需要输出最便 ...

  9. 7-9 旅游规划 (25 分)(Dijkstra算法)

    题意: ​ 思路:单源最短路问题,Dijkstra算法搞定就可以了,因为要找出最便宜的最短路,所以需要在更新最短距离的时候加一个条件(即当最短距离相等的时候,如果该路径的花费更小,就更新最小花费)就可 ...

随机推荐

  1. 配置nginx支持Https

    配置nginx支持Https一定要先使用stop停止nginx然后重新代开不能使用reload 一:安装letsencrypt 1.从git上克隆下来git clone https://github. ...

  2. C# WinForm:无法访问已释放的对象

    C#在父窗口中调用子窗口的过程: 1. 创建子窗口对象 2. 显示子窗口对象   笔者的程序中,主窗体MainFrm通过菜单调用子窗口ChildFrm.在窗体中定义了子窗口对象,然后在菜单项点击事件中 ...

  3. 认识data-xxx 的属性

    认识data-xxx 的属性 如, 在bootstrap之data-toggle="table", 不加这个属性,就不能实现框架自带的js效果. 1.它属于 HTML5 的 dat ...

  4. go语言的信号及其应用

    一.signal包 1.Notify函数 func Notify(c chan<- os.Signal, sig ...os.Signal) 说明:Notify函数让signal包将输入信号转发 ...

  5. AOP切点相关

    1.切点定义 切点定义包含两个部分 一个切入点表达式 一个包含名字和任意参数的方法签名 package com.sysker.aspect; import org.aspectj.lang.annot ...

  6. 从理论认识J2EE

    前言 在学习J2EE这块,看了成套的视频,感觉,感觉,感觉收获不是特别大,没用马老师讲得好,但是多少还是和J2EE打了个招呼,比如J2EE著名的十三个规范,他们有的人说不算什么规范,顶多可以理解为十三 ...

  7. uoj#119. 【UR #8】决战圆锥曲线(线段树+复杂度分析)

    题解 传送门 题解 然而要我来说我感觉只是个爆搜啊-- //minamoto #include<bits/stdc++.h> #define R register #define ll l ...

  8. 洛谷P3709 大爷的字符串题(莫队)

    题目背景 在那遥远的西南有一所学校 /*被和谐部分*/ 然后去参加该省省选虐场 然后某蒟蒻不会做,所以也出了一个字符串题: 题目描述 给你一个字符串a,每次询问一段区间的贡献 贡献定义: 每次从这个区 ...

  9. LAMP实战之构建博客网站

    1.首先检查LAMP环境 [root@cairui htdocs]# ps -ef | grep httpd php Mar03 ? :: /opt/apache2.2.34/bin/httpd -k ...

  10. (vue.js)import "mint-ui/lib/stylecss"失败

    在vue2.0中引入了mint-ui后总是报一个css的错误 但是package.json中已经配置了css-loader style-loader ,webpack.config中也已经配置了css ...