1111 Online Map (30)(30 分)
Input our current position and a destination, an online map can recommend several paths. Now your job is to recommend two paths to your user: one is the shortest, and the other is the fastest. It is guaranteed that a path exists for any request.
Input Specification:
Each input file contains one test case. For each case, the first line gives two positive integers N (2 <= N <= 500), and M, being the total number of streets intersections on a map, and the number of streets, respectively. Then M lines follow, each describes a street in the format:
V1 V2 one-way length time
where V1 and V2 are the indices (from 0 to N-1) of the two ends of the street; one-way is 1 if the street is one-way from V1 to V2, or 0 if not; length is the length of the street; and time is the time taken to pass the street.
Finally a pair of source and destination is given.
Output Specification:
For each case, first print the shortest path from the source to the destination with distance D in the format:
Distance = D: source -> v~1~ -> ... -> destination
Then in the next line print the fastest path with total time T:
Time = T: source -> w~1~ -> ... -> destination
In case the shortest path is not unique, output the fastest one among the shortest paths, which is guaranteed to be unique. In case the fastest path is not unique, output the one that passes through the fewest intersections, which is guaranteed to be unique.
In case the shortest and the fastest paths are identical, print them in one line in the format:
Distance = D; Time = T: source -> u~1~ -> ... -> destination
Sample Input 1:
10 15
0 1 0 1 1
8 0 0 1 1
4 8 1 1 1
3 4 0 3 2
3 9 1 4 1
0 6 0 1 1
7 5 1 2 1
8 5 1 2 1
2 3 0 2 2
2 1 1 1 1
1 3 0 3 1
1 4 0 1 1
9 7 1 3 1
5 1 0 5 2
6 5 1 1 2
3 5
Sample Output 1:
Distance = 6: 3 -> 4 -> 8 -> 5
Time = 3: 3 -> 1 -> 5
Sample Input 2:
7 9
0 4 1 1 1
1 6 1 1 3
2 6 1 1 1
2 5 1 2 2
3 0 0 1 1
3 1 1 1 3
3 2 1 1 2
4 5 0 2 2
6 5 1 1 2
3 5
Sample Output 2:
Distance = 3; Time = 4: 3 -> 2 -> 5给出一些streets的端点v1,v2,如果是one-way的,即单程,那么只能从v1到v2,如果不是单程的,也可以从v2到v1,找出最短的路(不唯一,那就找出其中时间最短的)和时间最短的(不唯一,就找出
经过地点最少的),如果说这两个路径一样,就只输出一次,按照题目给定的格式。
代码:
#include <stdio.h>
#include <string.h>
#define inf 0x3f3f3f3f
int m,n,source,destination,a,b,w,l,t;
int length[][],times[][],dis[],cost[],cost1[],num[],vis[],path1[],path2[];
void getpath1(int x) {
if(x != source) {
getpath1(path1[x]);
printf(" -> ");
}
printf("%d",x);
}
void getpath2(int x) {
if(x != source) {
getpath2(path2[x]);
printf(" -> ");
}
printf("%d",x);
}
int equals(int x) {
if(path1[x] != path2[x])return ;
else if(x == source)return ;
return equals(path1[x]);
}
int main() {
scanf("%d%d",&n,&m);
for(int i = ;i < n;i ++) {
for(int j = ;j < n;j ++) {
length[i][j] = times[i][j] = inf;
}
dis[i] = cost[i] = cost1[i] = inf;
path1[i] = path2[i] = -;
}
for(int i = ;i < m;i ++) {
scanf("%d%d%d%d%d",&a,&b,&w,&l,&t);
if(w) {
length[a][b] = l;
times[a][b] = t;
}
else {
length[a][b] = length[b][a] = l;
times[a][b] = times[b][a] = t;
}
}
scanf("%d%d",&source,&destination);
dis[source] = cost[source] = cost1[source] = ;
while() {
int t = -,mi = inf;
for(int i = ;i < n;i ++) {
if(!vis[i] && mi > dis[i]) {
mi = dis[i];
t = i;
}
}
if(t == -)break;
vis[t] = ;
for(int i = ;i < n;i ++) {
if(vis[i] || length[t][i] == inf)continue;
if(dis[i] > dis[t] + length[t][i]) {
path1[i] = t;
dis[i] = dis[t] + length[t][i];
cost1[i] = cost1[t] + times[t][i];
}
else if(dis[i] == dis[t] + length[t][i] && cost1[i] > cost1[t] + times[t][i]) {
cost1[i] = cost1[t] + times[t][i];
path1[i] = t;
}
}
}
memset(vis,,sizeof(vis));
while() {
int t = -,mi = inf;
for(int i = ;i < n;i ++) {
if(!vis[i] && mi > cost[i]) {
mi = cost[i];
t = i;
}
}
if(t == -)break;
vis[t] = ;
for(int i = ;i < n;i ++) {
if(vis[i] || times[t][i] == inf)continue;
if(cost[i] > cost[t] + times[t][i]) {
path2[i] = t;
cost[i] = cost[t] + times[t][i];
num[i] = num[t] + ;
}
else if(cost[i] == cost[t] + times[t][i] && num[i] > num[t] + ) {
num[i] = num[t] + ;
path2[i] = t;
}
}
}
printf("Distance = %d",dis[destination]);
if(!equals(destination)) {
printf(": ");
getpath1(destination);
printf("\n");
}
else {
printf("; ");
}
printf("Time = %d: ",cost[destination]);
getpath2(destination);
}
1111 Online Map (30)(30 分)的更多相关文章
- 1111 Online Map (30 分)
1111 Online Map (30 分) Input our current position and a destination, an online map can recommend sev ...
- 1111 Online Map (30 分)
1111. Online Map (30)Input our current position and a destination, an online map can recommend sever ...
- 【刷题-PAT】A1111 Online Map (30 分)
1111 Online Map (30 分) Input our current position and a destination, an online map can recommend sev ...
- PAT 1111 Online Map[Dijkstra][dfs]
1111 Online Map(30 分) Input our current position and a destination, an online map can recommend seve ...
- PAT甲级——1131 Subway Map (30 分)
可以转到我的CSDN查看同样的文章https://blog.csdn.net/weixin_44385565/article/details/89003683 1131 Subway Map (30 ...
- PAT甲级——1111 Online Map (单源最短路经的Dijkstra算法、priority_queue的使用)
本文章同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90041078 1111 Online Map (30 分) ...
- PAT甲级1111. Online Map
PAT甲级1111. Online Map 题意: 输入我们当前的位置和目的地,一个在线地图可以推荐几条路径.现在你的工作是向你的用户推荐两条路径:一条是最短的,另一条是最快的.确保任何请求存在路径. ...
- etectMultiScale(gray, 1.2,3,CV_HAAR_SCALE_IMAGE,Size(30, 30))
# 函数原型detectMultiScale(gray, 1.2,3,CV_HAAR_SCALE_IMAGE,Size(30, 30)) # gray需要识别的图片 # 1.03:表示每次图像尺寸减小 ...
- c# 时间格式处理,获取格式: 2014-04-12T12:30:30+08:00
C# 时间格式处理,获取格式: 2014-04-12T12:30:30+08:00 一.获取格式: 2014-04-12T12:30:30+08:00 方案一:(局限性,当不是当前时间时不能使用) ...
- java.time.format.DateTimeParseException: Text '2019-10-11 12:30:30' could not be parsed at index 10
java.time.format.DateTimeParseException: Text '2019-10-11 12:30:30' could not be parsed at index 10 ...
随机推荐
- objc_msgSend 报错
NSMutableArray * mutableArray = [NSMutableArray arrayWithArray:array]; objc_msgSend(mutableArray,@se ...
- 笔记本中G-Sensor(加速计) M-Sensor 陀螺仪等传感器的区别
1.G-sensor重力传感器 作用 G-sensor中文是加速度传感器的意思(英文全称是Accelerometer-sensor),它能够感知到加速力的变化,加速力就是当物体在加速过程中作用在物体上 ...
- 看完这篇还不会自定义 View ,我跪搓衣板
自定义 View 在实际使用的过程中,我们经常会接到这样一些需求,比如环形计步器,柱状图表,圆形头像等等,这时我们通常的思路是去Google 一下,看看 github 上是否有我们需要的这些控件,但是 ...
- React系列之--props属性
版权声明:本文为博主原创文章,未经博主允许不得转载. PS:转载请注明出处作者:TigerChain地址:http://www.jianshu.com/p/fa81cebac3ef本文出自TigerC ...
- 嵌入式c语言笔试
1 读程序段,回答问题int main(int argc,char *argv[]){int c=9,d=0;c=c++%5;d=c;printf("d=%d\n",d);retu ...
- insert小细节,大问题
今天现场报流程无法查看,已查看流程表中没有数据了.昨天有运行过删除垃圾数据的脚步.大致过程是: create table bak_test a as select * from test; creat ...
- hadoop 出现FATAL conf.Configuration: error parsing conf file,异常
FATAL conf.Configuration: error parsing conf file: com.sun.org.apache.xerces.internal.impl.io.Malfor ...
- iOS:苹果企业证书通过网页分发安装app
本文转载至 http://blog.sina.com.cn/s/blog_6afb7d800101fa16.html 苹果的企业级证书发布的应用,是不用设备授权即可直接安装,并且不限设备上限.为了方便 ...
- maven-appfuse配备步骤
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/qiaqia609/article/details/36231851 maven-appfuse配置步 ...
- vue --- axios , vuex
一 . 内容回顾 1.webpack(前端中工作,项目上线之前对整个前端项目优化) - entry:整个项目的程序入口(main.js或index.js): - output:输出的出口: - loa ...