1030 Travel Plan (30分)(dijkstra 具有多种决定因素)
A traveler's map gives the distances between cities along the highways, together with the cost of each highway. Now you are supposed to write a program to help a traveler to decide the shortest path between his/her starting city and the destination. If such a shortest path is not unique, you are supposed to output the one with the minimum cost, which is guaranteed to be unique.
Input Specification:
Each input file contains one test case. Each case starts with a line containing 4 positive integers N, M, S, and D, where N (≤) is the number of cities (and hence the cities are numbered from 0 to N−1); M is the number of highways; S and D are the starting and the destination cities, respectively. Then M lines follow, each provides the information of a highway, in the format:
City1 City2 Distance Cost
where the numbers are all integers no more than 500, and are separated by a space.
Output Specification:
For each test case, print in one line the cities along the shortest path from the starting point to the destination, followed by the total distance and the total cost of the path. The numbers must be separated by a space and there must be no extra space at the end of output.
Sample Input:
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:
0 2 3 3 40
- 题目分析:单源最短路
- #define _CRT_SECURE_NO_WARNINGS
- #include <climits>
- #include<iostream>
- #include<vector>
- #include<queue>
- #include<stack>
- #include<algorithm>
- #include<string>
- #include<cmath>
- using namespace std;
- int N, M, S, D;
- int a[][];
- int b[][];
- int Dist[];
- int Path[];
- int Collected[];
- int Cost[];
- void Dijsktra()
- {
- Dist[S] = ;
- Path[S] = -;
- Cost[S] = ;
- for (int i = ; i < N; i++)
- {
- int minv=-, min = INT_MAX;
- for (int v = ; v < N; v++)
- {
- if (!Collected[v] && min > Dist[v])
- {
- min = Dist[v];
- minv = v;
- }
- }
- Collected[minv] = ;
- for (int j = ; j < N; j++)
- {
- if (!Collected[j] && a[minv][j] != INT_MAX)
- {
- if (Dist[minv] + a[minv][j] < Dist[j])
- {
- Dist[j] = Dist[minv] + a[minv][j];
- Cost[j] = Cost[minv] + b[minv][j];
- Path[j] = minv;
- }
- else if (Dist[minv] + a[minv][j] == Dist[j])
- {
- if (Cost[minv] + b[minv][j] < Cost[j])
- {
- Cost[j] = Cost[minv] + b[minv][j];
- Path[j] = minv;
- }
- }
- }
- }
- }
- }
- int main()
- {
- cin >> N >> M >> S >> D;
- int c1, c2, d, c;
- fill(a[],a[]+*,INT_MAX);
- fill(b[], b[]+* , INT_MAX);
- fill(Dist, Dist + , INT_MAX);
- fill(Cost, Cost + , INT_MAX);
- for (int i = ; i < M; i++)
- {
- cin >> c1 >> c2 >> d >> c;
- a[c1][c2] = a[c2][c1] = d;
- b[c1][c2] = b[c2][c1] = c;
- }
- Dijsktra();
- int temp = D;
- stack<int> st;
- while (temp!=-)
- {
- st.push(temp);
- temp = Path[temp];
- }
- while (!st.empty())
- {
- cout << st.top()<<" ";
- st.pop();
- }
- cout << Dist[D] <<" "<<Cost[D];
- return ;
- }
1030 Travel Plan (30分)(dijkstra 具有多种决定因素)的更多相关文章
- PAT 甲级 1030 Travel Plan (30 分)(dijstra,较简单,但要注意是从0到n-1)
1030 Travel Plan (30 分) A traveler's map gives the distances between cities along the highways, to ...
- 【PAT甲级】1030 Travel Plan (30 分)(SPFA,DFS)
题意: 输入N,M,S,D(N,M<=500,0<S,D<N),接下来M行输入一条边的起点,终点,通过时间和通过花费.求花费最小的最短路,输入这条路径包含起点终点,通过时间和通过花费 ...
- PAT-1030 Travel Plan (30 分) 最短路最小边权 堆优化dijkstra+DFS
PAT 1030 最短路最小边权 堆优化dijkstra+DFS 1030 Travel Plan (30 分) A traveler's map gives the distances betwee ...
- [图算法] 1030. Travel Plan (30)
1030. Travel Plan (30) A traveler's map gives the distances between cities along the highways, toget ...
- 1030 Travel Plan (30)(30 分)
A traveler's map gives the distances between cities along the highways, together with the cost of ea ...
- PAT Advanced 1030 Travel Plan (30) [Dijkstra算法 + DFS,最短路径,边权]
题目 A traveler's map gives the distances between cities along the highways, together with the cost of ...
- 1030. Travel Plan (30)
时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A traveler's map gives the dista ...
- PAT A 1030. Travel Plan (30)【最短路径】
https://www.patest.cn/contests/pat-a-practise/1030 找最短路,如果有多条找最小消耗的,相当于找两次最短路,可以直接dfs,数据小不会超时. #incl ...
- PAT甲题题解-1030. Travel Plan (30)-最短路+输出路径
模板题最短路+输出路径如果最短路不唯一,输出cost最小的 #include <iostream> #include <cstdio> #include <algorit ...
随机推荐
- yolo3各部分代码详解(超详细)
0.摘要 最近一段时间在学习yolo3,看了很多博客,理解了一些理论知识,但是学起来还是有些吃力,之后看了源码,才有了更进一步的理解.在这里,我不在赘述网络方面的代码,网络方面的代码比较容易理解,下面 ...
- python之二分法求平方根
前几天学完python的程序分支结构后,老师课后留了一个问题,用两种方法计算一个大于或等于 1 的实数 n 数的平方根. 描述设计一个用二分法计算一个大于或等于 1 的实数 n 的平方根的函数sqrt ...
- pytorch RNN层api的几个参数说明
classtorch.nn.RNN(*args, **kwargs) input_size – The number of expected features in the input x hidde ...
- 项目总结&读书笔记
Python项目 01-函数版ATM 读书笔记 01-Effective Python
- JavaScript 模式》读书笔记(3)— 字面量和构造函数2
上一篇啊,我们聊了聊字面量对象和自定义构造函数.这一篇,我们继续,来聊聊new和数组字面量. 三.强制使用new的模式 要知道,构造函数,只是一个普通的函数,只不过它却是以new的方式调用.如果在调用 ...
- video.js 视频自动全屏播放
1.头部引用脚本 <link href="css/video-js.min.css" rel="stylesheet"> <link href ...
- VLAN间的通信
多臂路由/单臂路由 :实现不同VLAN间的通信 1.多臂路由 划分两个vlan,将主机划分到不同vlan中 配置ip地址,(注意:不同vlan在不同的网络下) 将交换机的两个端口分别与路由器连接,将这 ...
- hdu2066多源最短路
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/2066/ SPFA可以高效过,代码如下: #include<bits/stdc++.h> using ...
- [BFS,A*,k短路径] 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛 path (Problem - 6705)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6705 path Time Limit: 2000/2000 MS (Java/Others) Mem ...
- 「面试指南」JS数组Array常用算法,Array算法的一般解答思路
先看一道面试题 在 LeetCode 中有这么一道简单的数组算法题: // 给定一个整数数组 nums 和一个目标值 target, // 请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下 ...