//法1:已知起点终点->单源最短路径
//有权图的单源最短路径:Dijkstra的变形
#include <iostream>
#define MAXN 520
#define INFINITY 65535
using namespace std;int G[MAXN][MAXN];int P[MAXN][MAXN];int N,M,S,D;void CreateG(){cin>>N>>M>>S>>D;for(int i=0;i<N;i++){for(int j=0;j<N;j++){G[i][j]=INFINITY;P[i][j]=INFINITY;}}int v1,v2,l,p;for(int i=0;i<M;i++){cin>>v1>>v2>>l>>p;G[v1][v2]=l;G[v2][v1]=l;P[v1][v2]=p;P[v2][v1]=p;}}int dist[MAXN];int cost[MAXN];int path[MAXN];
int collected[MAXN];
int FindMin(){
//按距离找最小int minDist=INFINITY,minId=-1;for(int i=0;i<N;i++){if(!collected[i]){if(dist[i]<minDist){minDist=dist[i];minId=i;}}}return minId;
}void Dijkstra(){
//dist、cost初始化
//path在本题中并不需要fill(dist,dist+N,INFINITY);fill(cost,cost+N,INFINITY);fill(path,path+N,INFINITY);dist[S]=0;cost[S]=0;while(1){int V=FindMin();if(V==-1) break;collected[V]=1;for(int j=0;j<N;j++){if(!collected[j] && G[V][j]!=INFINITY){if(dist[V]+G[V][j]<dist[j]){dist[j]=dist[V]+G[V][j];path[j]=V;
//1:如果按距离更新:cost跟着dist一起更新cost[j]=cost[V]+P[V][j];}else if((dist[V]+G[V][j] == dist[j]) && (cost[V]+P[V][j]<cost[j])){cost[j]=cost[V]+P[V][j];path[j]=V;
//2:如果距离相同,按价格更新,cost单独更新}                }}}
}int main(){CreateG();Dijkstra();cout<<dist[D]<<" "<<cost[D];return 0;
}
//法2:使用通用的Floyd写法,同样可以解决
//就是显然慢很多
#include <iostream>
#define MAXN 510
#define W_INFINITY 510
using namespace std;int G[MAXN][MAXN];int P[MAXN][MAXN];
int nv,ne;
int S,D;void CreateG(){cin>>nv>>ne>>S>>D;for(int i=0;i<nv;i++){for(int j=0;j<nv;j++){G[i][j]=W_INFINITY;P[i][j]=W_INFINITY;if(i==j){G[i][j]=0;P[i][j]=0;}}}int v1,v2,w,p;for(int i=0;i<ne;i++){cin>>v1>>v2>>w>>p;G[v1][v2]=w;G[v2][v1]=w;P[v1][v2]=p;P[v2][v1]=p;}
}int dist[MAXN][MAXN];
int pric[MAXN][MAXN];
void Floyd(){for(int i=0;i<nv;i++){for(int j=0;j<nv;j++){dist[i][j]=G[i][j];pric[i][j]=P[i][j];}}for(int k=0;k<nv;k++){for(int i=0;i<nv;i++){for(int j=0;j<nv;j++){if(dist[i][k]+dist[k][j]<dist[i][j]){dist[i][j]=dist[i][k]+dist[k][j];pric[i][j]=pric[i][k]+pric[k][j];}else if(dist[i][k]+dist[k][j]==dist[i][j]){if(pric[i][k]+pric[k][j]<pric[i][j]){pric[i][j]=pric[i][k]+pric[k][j];}}}}}
}int main(){CreateG();Floyd();cout<<dist[S][D]<<" "<<pric[S][D];system("pause");return 0;
}

【PTA】旅游规划 (25 分)相关推荐

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

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

  2. PTA 7-3 旅游规划 (25分)(双权值Dijkstra最短路)

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

  3. 7-3 旅游规划 (25 分)(C语言实现)

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

  4. 案例6-1.5 旅游规划 (25 分)邻接表实现

    案例6-1.5 旅游规划 (25 分) 用邻接表实现Dijkstra算法 这题一开始做的时候没想到用邻接数组做,所以就用的链表. 总的来说还是Dijkstra算法,只不过是存储方式的问题罢了,我用了四 ...

  5. 7-图6 旅游规划 (25 分)

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

  6. 7-2 旅游规划 (25分)

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

  7. PTA 7-1 旅游规划 (25分) 数据结构 Floyd

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

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

    这道题我用dijstra算法,对这个算法稍微做改进就可以.可以说非常经典了! 算法的思想我不必详述,毕竟大家在学习<数据结构>的时候都已经非常了解了. 读我的代码要注意的细节: 1.我储存 ...

  9. 【dijkstra模板】旅游规划 (25 分)

    立志用最少的代码做最高效的表达 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条 ...

最新文章

  1. (五)磁盘存储空间的管理
  2. 最长公共子序列LCS[C++题解]
  3. 4 微信公众号开发 被动回复消息 回复没有反应怎么办
  4. C 语言运算符优先级(记忆口诀)
  5. java8收集器,Java 8中的收集器collectionAndThen()方法
  6. jQuery: 选择器(DOM,name,属性,元素)
  7. java反编译工具_推荐Java反编译工具luyten、jd-gui
  8. python中的元组字符串整数浮点数都是不可变的数据类型,Python不可变数据类型总结...
  9. 2014程序化购买元年-芒果移动广告-王江
  10. 基于Springboot+Mybatisplus的学校学院门户学生就业指导管理系统
  11. 数据结构 图的邻接表
  12. 如何用c语言word文件页数,word文件页码怎么设置
  13. 输入法android2.0,搜狗手机输入法forAndroid2.0版七大革命性升级
  14. 矩阵论极简笔记(1):如何降维度打击
  15. 最适合编程的笔记本电脑是什么?
  16. SkyWalking 概念与设计总览
  17. JavaScript实现贪吃蛇小游戏
  18. luogu P1357 花园
  19. 三阶魔方拼全6面口诀
  20. 多个搜索引擎搜索网站,提高搜索效率,快人一步

热门文章

  1. 《卓有成效的管理者》评语
  2. div标签中 id和 class的区别
  3. matlab主要功能,matlab一些基本函数的功能
  4. 【学习记录】HT32F52352舵机控制
  5. 哪种类型是python不支持的_Python不支持以下哪种数据类型?
  6. java+ssh+mysql生鲜商城
  7. python做股票系统_GitHub - jiuweng/stock: stock,股票系统。使用python进行开发。
  8. SpringBoot实现定时任务的三种方式,总有一款适合你!
  9. Cesium实现雷达扫描效果
  10. Java 基础巩固:内部类的字节码学习和实战使用场景