07-图6 旅游规划 (25分)(以此感谢zyx佬)
这个题的话算是模板题改编了一点吧,不过个人感觉这个改编很有助于你理解迪杰斯特拉这个算法的真谛。
题解:新开一个cost数组来记录花费,仍然是用了优先队列优化的一个思想,与模板题不同的是只需要加一句话(感谢zyx佬发现问题
cost[temp.id]=min(cost[temp.id],temp.w);
这里提可以供一组数据来告诉你为什么要加这句话
不加这句话输出2 3显然不对
3 3 1 3
1 2 2 2
1 3 2 2
2 3 0 1
#pragma GCC optimize(3,"Ofast","inline")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <math.h>
#include <string>
#include <list>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#define maxn 600
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int mod = 1000007;
using namespace std;
struct wazxy{int v,w,len;wazxy(int x,int a,int b){v=x,w=a,len=b;}
};vector <vector<wazxy> > edge;
int n,m,s,e;
bool visited[maxn];
int dis[maxn],cost[maxn];struct node{int id,dis,w;node(int a,int b,int c){id=a,dis=b,w=c;}bool operator < (const node & a)const{return dis>a.dis;}
};
void dij(){memset(dis,MaxN,sizeof(dis));memset(cost,0,sizeof(cost));memset(visited,false,sizeof(visited));dis[s]=0,cost[s]=0;priority_queue<node> q;q.push(node(s,0,0));while(!q.empty()){node temp=q.top();q.pop();if(visited[temp.id]) continue;visited[temp.id]=true;cost[temp.id]=min(cost[temp.id],temp.w);for(int i=0;i<edge[temp.id].size();i++){wazxy node1=edge[temp.id][i];if(visited[node1.v]) continue;if(dis[node1.v]>=temp.dis+node1.len){dis[node1.v]=temp.dis+node1.len;cost[node1.v]=temp.w+node1.w;q.push(node(node1.v,dis[node1.v],cost[node1.v]));}}}
}int main()
{edge.resize(maxn);cin>>n>>m>>s>>e;for(int i=0;i<m;i++){int x,y,a,b;scanf("%d%d%d%d",&x,&y,&a,&b);edge[x].push_back(wazxy(y,b,a));edge[y].push_back(wazxy(x,b,a));}dij();cout<<dis[e]<<" "<<cost[e]<<endl;return 0;
}
07-图6 旅游规划 (25分)(以此感谢zyx佬)相关推荐
- 案例6-1.5 旅游规划 (25 分)邻接表实现
案例6-1.5 旅游规划 (25 分) 用邻接表实现Dijkstra算法 这题一开始做的时候没想到用邻接数组做,所以就用的链表. 总的来说还是Dijkstra算法,只不过是存储方式的问题罢了,我用了四 ...
- 7-2 旅游规划 (25分)
7-2 旅游规划 (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路 ...
- PTA 7-3 旅游规划 (25分)(双权值Dijkstra最短路)
7-3 旅游规划 (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路 ...
- 7-3 旅游规划 (25 分)(C语言实现)
有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路径都是最短的,那么需要输出最便 ...
- 07.图6 旅游规划 [Dijkstra 算法]
07-图6 旅游规划 (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干 ...
- PTA 07-图6 旅游规划 (25分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/717 5-9 旅游规划 (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路 ...
- 7-图6 旅游规划 (25 分)
7-图6 旅游规划 (25 分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干 ...
- PTA 7-1 旅游规划 (25分) 数据结构 Floyd
有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路径都是最短的,那么需要输出最便 ...
- 7-9 旅游规划 (25分) 【最短路径 Floyd+Dijkstra】
有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路径都是最短的,那么需要输出最便 ...
最新文章
- linux 下得到进程的启动时间
- python小游戏代码大全-python小游戏实现代码
- 目标检测 nms非极大抑制算法
- CSS 强制换行和禁止换行强制换行 和禁止换行样式
- [蓝桥杯]2016蓝桥省赛B组题目及详解
- PaddleOCR——申请显存不足【Allocate too much memory for the GPU memory pool, assigned 8000 MB】解决方案
- 互联网协议入门 : 用户 ------ 底层
- 用一个实际例子理解Docker volume工作原理 1
- leetcode37 --- solveSudoku(解数独)
- 逼疯上海人的垃圾分类满月了:羊肉串变羊肉吕,奶茶里珍珠按颗算...
- word修订模式怎么彻底关闭_标书制作靠它准没错!那些你不知道的Word技巧大全...
- bzoj 3361: [Usaco2004 Jan]培根距离
- 20155212 2016-2017-2 《Java程序设计》第3周学习总结
- 李宏毅机器学习hw1~4作业 强化点
- 女生考华为IE会容易一点吗?女生做网工一般是什么岗位呢?找工作容易吗?需要出差吗?以后怎么发展呢?
- Spring源码解析之AOP篇(三)----Spring开启AOP的两种方式
- 在odl中如何实现rpc
- 星期一到星期日的英文_缩写_读音_巧记方法
- OpenGL(十五)——Qt OpenGL三种不同的纹理滤波方式、光照、物体的移动
- 旷视研究院获得 ECCV SSLAD 双赛道冠军