当前位置:网站首页>1030 Travel Plan
1030 Travel Plan
2022-06-27 17:56:00 【Brosto_Cloud】
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 (≤500) 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注意存储路径时使用的数组pre存储的应该是前驱,应该用dfs遍历输出,否则测试点一不通过。
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
struct edge {
int next, cost, dis;
};
vector<edge>g[1000];
int n, m, s, d, dis[1000], cost[1000];
int pre[1000];//记录最短路径 前驱
bool vis[1000];
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>>q;
void dfs(int x) {
if (x == s) {
cout << x << ' ';
return;
}
dfs(pre[x]);
cout << x << ' ';
}
int main() {
cin >> n >> m >> s >> d;
for (int i = 1; i <= m; i++) {
int u, v;
cin >> u >> v;
edge e;
cin >> e.dis >> e.cost;
e.next = v;
g[u].push_back(e);
e.next = u;
g[v].push_back(e);
}
memset(dis, 127, sizeof(dis));
memset(cost, 127, sizeof(cost));
dis[s] = 0;
cost[s] = 0;
q.push(make_pair(0, s));
while (!q.empty()) {
int u = q.top().second;
q.pop();
if (vis[u]) {
continue;
}
vis[u] = 1;
for (int i = 0; i < g[u].size(); i++) {
int v = g[u][i].next;
if (dis[v] > dis[u] + g[u][i].dis) {
dis[v] = dis[u] + g[u][i].dis;
cost[v] = cost[u] + g[u][i].cost;
pre[v] = u;
q.push(make_pair(dis[v], v));
} else if (dis[v] == dis[u] + g[u][i].dis) {
if (cost[v] > cost[u] + g[u][i].cost) {
cost[v] = cost[u] + g[u][i].cost;
pre[v] = u;
q.push(make_pair(dis[v], v));
}
}
}
}
dfs(d);
cout << dis[d] << ' ' << cost[d];
return 0;
}
边栏推荐
- binder hwbinder vndbinder
- Usage of rxjs mergemap
- 实战回忆录:从Webshell开始突破边界
- shell脚本常用命令(三)
- 什么是 ICMP ?ping和ICMP之间有啥关系?
- 经纬度分析
- 实战回忆录:从Webshell开始突破边界
- Current market situation and development prospect forecast of global 3,3 ', 4,4' - biphenyltetracarboxylic dianhydride industry in 2022
- C# 二维码生成、识别,去除白边、任意颜色
- 云笔记到底哪家强 -- 教你搭建自己的网盘服务器
猜你喜欢

9.OpenFeign服务接口调用

Solution of adding st-link to Huada MCU Keil

Running lantern experiment based on stm32f103zet6 library function

GIS remote sensing R language learning see here

What is ssr/ssg/isr? How do I host them on AWS?

Jinyuan's high-end IPO was terminated: it was planned to raise 750million Rushan assets and Liyang industrial investment were shareholders

Bit.Store:熊市漫漫,稳定Staking产品或成主旋律

从感知机到前馈神经网络的数学推导

Online text batch inversion by line tool

DCC888 :Register Allocation
随机推荐
图扑数字孪生智慧能源一体化管控平台
Workflow automation low code is the key
判断一个变量是数组还是对象?
[cloud based co creation] the "solution" of Digital Travel construction in Colleges and Universities
Memoirs of actual combat: breaking the border from webshell
OpenSSL client programming: SSL session failure caused by an obscure function
形参的默认值-及return的注意事项-及this的使用-和箭头函数的知识
DCC888 :Register Allocation
今晚战码先锋润和赛道第2期直播丨如何参与OpenHarmony代码贡献
数仓的字符截取三胞胎:substrb、substr、substring
过关斩将,擒“指针”(下)
Market status and development prospect forecast of global 4-methyl-2-pentanone industry in 2022
Garbage collector driving everything -- G1
binder hwbinder vndbinder
Labelimg usage guide
Cucumber自动化测试框架使用
redis集群系列三
云笔记到底哪家强 -- 教你搭建自己的网盘服务器
shell脚本常用命令(三)
Solution to Maxwell error (MySQL 8.x connection)