当前位置:网站首页>1030 Travel Plan
1030 Travel Plan
2022-06-27 20:47: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 40Note the array used to store the path pre Stored should be a precursor , Should use the dfs Traverse the output , Otherwise, the test point fails .
#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];// Record the shortest path Forerunner
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;
}
边栏推荐
猜你喜欢

Univision hyperinsight: Nuggets' $16.494 billion "gold hoe" in the observable market?

Postman Chinese tutorial (postman Chinese version)

Oracle architecture summary

Mongodb introduction and typical application scenarios

On the drawing skills of my writing career

Character interception triplets of data warehouse: substrb, substr, substring

数据库锁问题

Web APLS phase - Section 14 - local storage

分享|智慧环保-生态文明信息化解决方案(附PDF)

Dictionary tree (review)
随机推荐
openssl客户端编程:一个不起眼的函数导致的SSL会话失败问题
Character interception triplets of data warehouse: substrb, substr, substring
CSDN 技能樹使用體驗與產品分析(1)
[数组]BM99 顺时针旋转矩阵-简单
基于微信小程序的警局报案便民服务平台#毕业设计
[STL programming] [common competition] [Part 3]
Mass lucky hash game system development - conflict resolution (code analysis)
Installing services for NFS
Leetcode 821. Minimum distance of characters (simple) - sequel
# Leetcode 821. Minimum distance of characters (simple)
优维HyperInsight:掘金164.94亿美元可观测市场的“金锄头”?
Yyds dry goods counting SQL sub query
数据库锁问题
eval函数,全局、本地变量
linux系统笑着玩Oracle数据库多表查询-连接查询
CSDN 技能树使用体验与产品分析(1)
SQL报了一个不常见的错误,让新来的实习生懵了
花了6个月时间完成本科优秀毕业设计,我做了什么?
Rust advanced ownership - memory management
Web APls 阶段——第十四节——本地存储