1030. Travel Plan (30)
来源:互联网 发布:数据分析考研专业 编辑:程序博客网 时间:2024/06/06 18:45
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 Input4 5 0 30 1 1 201 3 2 300 3 4 100 2 2 202 3 1 20Sample Output
0 2 3 3 40
#include <iostream>#include <vector>#include <utility>#include <cstring>#define MAX 505#define INF (1<<30)using namespace std;bool visit[MAX] = {false};int pre[MAX];int dist[MAX];int mincost[MAX] = {0};int N, M, S, D;pair<int, int> city[MAX][MAX];//pair型邻接矩阵first记录路长second记录路费void graph_init(){ int v, w, dis, cost; memset(pre, -1, sizeof(int)*N); for(int i=0; i<N; i++) { dist[i] = INF; for(int j=0; j<N; j++) city[i][j] = make_pair(INF, INF); } for(int i=0; i<M; i++) { cin >> v >> w >> dis >> cost; city[v][w] = make_pair(dis, cost); city[w][v] = make_pair(dis, cost); }}void dijkstra(){ int mindist; int key; dist[S] = 0; for(int i=0; i<N; i++) { mindist = INF; for(int j=0; j<N; j++) { if(mindist > dist[j] && !visit[j]) { mindist = dist[j]; key = j; } } if(key == D) break; visit[key] = true; for(int j=0; j<N; j++) { if(!visit[j]) { if(city[key][j].first+mindist < dist[j]) { dist[j] = city[key][j].first+mindist; mincost[j] = mincost[key]+city[key][j].second; pre[j] = key; } else if(city[key][j].first+mindist == dist[j])//路径相同时计算哪条路径路费较小 { if(mincost[j] > mincost[key]+city[key][j].second) { pre[j] = key; mincost[j] = mincost[key]+city[key][j].second; } } } } }}void print_path(int x){ if(pre[x] != -1) print_path(pre[x]); cout << x << " ";}int main(){ cin >> N >> M >> S >> D; graph_init(); dijkstra(); print_path(D); cout << dist[D] << " " << mincost[D] << endl; return 0;}
- 1030. Travel Plan (30)
- 1030. Travel Plan (30)
- 1030. Travel Plan (30)
- 1030. Travel Plan (30)
- 1030. Travel Plan (30)
- 1030. Travel Plan (30)
- 1030. Travel Plan (30)
- 1030. Travel Plan (30)
- 1030. Travel Plan (30)
- 1030. Travel Plan (30)
- 1030. Travel Plan (30)
- 1030. Travel Plan (30)
- 1030. Travel Plan (30)
- 1030. Travel Plan (30)
- 1030. Travel Plan (30)
- 1030. Travel Plan (30)
- 1030. Travel Plan (30)
- 1030. Travel Plan (30)
- ZZULIOJ 2128: base64解密(郑轻校赛)
- 微信小程序码:不要方,就爱圆
- ORA-29701: unable to connect to Cluster Synchronization Service
- SqlServer远程连接配置
- Networking with URLSession一 URLSession
- 1030. Travel Plan (30)
- ant-design`Form[inline|horizontal|vertical]` is deprecated, please use `Form[layout]`
- Windows下的JDK和tomcat的安装
- 多线程之——共享数据
- Leetcode 299. Bulls and Cows
- 通过百度坐标获取地址
- 基于Simase_LSTM的计算中文句子相似度经验总结与分享
- 排序算法系列总结
- 事务以及Spring中的事务管理二