有了一张自驾旅游路线图,你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。

输入格式:

输入说明:输入数据的第1行给出4个正整数NN、MM、SS、DD,其中NN(2\le N\le 5002≤N≤500)是城市的个数,顺便假设城市的编号为0~(N-1N−1);MM是高速公路的条数;SS是出发地的城市编号;DD是目的地的城市编号。随后的MM行中,每行给出一条高速公路的信息,分别是:城市1、城市2、高速公路长度、收费额,中间用空格分开,数字均为整数且不超过500。输入保证解的存在。

输出格式:

在一行里输出路径的长度和收费总额,数字间以空格分隔,输出结尾不能有多余空格。

输入样例:

4 5 0 3
0 1 1 20
1 3 2 30
0 3 4 10
0 2 2 20
2 3 1 20

输出样例:

3 40

/* 题意要求: 保证最短距离,若距离相等 则选取总价格最低的路径
1. dijkstra找最短路 一个新节点加入已找到最短路径的集合S后 更新其他所有点的权重时 需要增加一种情况 就是当距离不变时 更新价格为较小的
那条路的价格 。
*/
#include "iostream"
using namespace std;
#define INF 501
int dist[];
int map[][]; /* 2城市之间的距离~ */
int cost[][]; /* 2城市之间的路费~ */
int MCost[];
bool visited[] = {false}; /* 判断该点是否已经求出最短路 */
/* dijkstra求最短路的变种~
*/
void dijkstra(int v0,int v,int d) {
dist[v0] = ; visited[v0] = true; /* 初始状态 v节点属于集合 */
int i, w;
for (i = ; i < v; i++) { /* 开始主循环 每次求得v到某个顶点的最短路径 并加v到集合 */
int MIN = INF; /* 当前所知离v0最近的节点 */
for (w = ; w < v; w++) {
if (!visited[w] ) { /* 节点在 结合 V-S中 */
if (dist[w] < MIN) { /* 找到最短路径节点 */
MIN = dist[w];
v0 = w;
}
}
}
visited[v0] = true;
for (w = ; w < v; w++) { /* 更新当前的最短路径 */
if (!visited[w] && MIN + map[v0][w] < dist[w]) {
dist[w] = MIN + map[v0][w];
MCost[w] = MCost[v0] + cost[v0][w];
}
else if (!visited[w] && MIN + map[v0][w] == dist[w] && MCost[w] > MCost[v0] + cost[v0][w]) { /* 路径长度相等则选择价格较便宜的一条*/
MCost[w] = MCost[v0] + cost[v0][w];
}
}
}
}
int main() {
int v, e, s, d;
cin >> v >> e >> s >> d;
for(int i=;i<v;i++)
for (int j = ; j < v; j++) {
map[i][j] = map[j][i] = INF;
cost[i][j] = cost[j][i] = INF;
}
for (int i = ; i < e; i++) {
int a, b, c, d;
cin >> a >> b >> c >> d;
map[a][b] = map[b][a] = c;
cost[a][b] = cost[b][a] = d;
}
for (int i = ; i < v; i++) {
dist[i] = map[i][s]; /* 记录当到出发点的距离 */
MCost[i] = cost[i][s];
}
dijkstra(s,v,d);
cout << dist[d] <<" "<<MCost[d]<< endl;
return ;
}

PAT 07-图6 旅游规划 (25分)的更多相关文章

  1. 【(图) 旅游规划 (25 分)】【Dijkstra算法】

    #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> us ...

  2. PTA 07-图6 旅游规划 (25分)

    题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/717 5-9 旅游规划   (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路 ...

  3. PTA 7-10(图) 旅游规划 最短路问题

    7-10(图) 旅游规划 (25 分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果 ...

  4. PAT乙级:1090危险品装箱(25分)

    PAT乙级:1090危险品装箱(25分) 题干 集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题给定一张不相容物品的清 ...

  5. PAT乙级:1070 结绳 (25分)

    PAT乙级:1070 结绳 (25分) 题干 给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下图所示套接在一起.这样得到的绳子又被当成是另一段绳子,可以再次对折去跟 ...

  6. PAT 甲级 1013 Battle Over Cities (25 分)(图的遍历,统计强连通分量个数,bfs,一遍就ac啦)

    1013 Battle Over Cities (25 分)   It is vitally important to have all the cities connected by highway ...

  7. PAT 甲级 1040 Longest Symmetric String (25 分)(字符串最长对称字串,遍历)

    1040 Longest Symmetric String (25 分)   Given a string, you are supposed to output the length of the ...

  8. PAT 甲级 1017 Queueing at Bank (25 分)(模拟题,有点思维小技巧,第二次做才理清思路)

    1017 Queueing at Bank (25 分)   Suppose a bank has K windows open for service. There is a yellow line ...

  9. 【刷题-PAT】A1126 Eulerian Path (25 分)

    1126 Eulerian Path (25 分) In graph theory, an Eulerian path is a path in a graph which visits every ...

随机推荐

  1. HTTP错误 404.17

    HTTP错误 404.17 - Not Found" IIS 7.5 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理   出现这种情况的原因通常是因为先安装了Framework,后 ...

  2. 边框的css3样式

    一.圆角(border-radius) border-radius:[ <length> | <percentage> ]{1,4} [ / [ <length>  ...

  3. Ext.QuickTips.init();

    在Extjs的组件需要提示框时往往需要此语句. 首先,Ext.QuickTips是什么? 在Ext JS 4.2.0 的API中可以查到,注意在其他的Extjs版本以下查不到,这是因为在其他版本Ext ...

  4. centos 下查找软件安装在哪里的命令

    linux centos 下查找软件所安装的目录在哪里 1. 如果是rpm安装的可以:rpm -ql linux(1)package-name 具体你可以man rpm 2. 可以在根目录上直接fin ...

  5. [转载]MongoDB学习 (四):创建、读取、更新、删除(CRUD)快速入门

    本文介绍数据库的4个基本操作:创建.读取.更新和删除(CRUD). 接下来的数据库操作演示,我们使用MongoDB自带简洁但功能强大的JavaScript shell,MongoDB shell是一个 ...

  6. SNMP中文

    SNMP4J 处理中文信息时的问题 http://qsjiangs.iteye.com/blog/1966899

  7. HDU4535+公式

    错排公式. 用64位! /* */ #include<stdio.h> #include<string.h> #include<stdlib.h> #include ...

  8. JavaSE replaceAll 方法

    private String srcStr = "index\\.php\\?action=";//要替换的原字符串 private String destStr = " ...

  9. Mpeg-2的同步及时间恢复--STC,PCR,DTS,PTS

    http://blog.csdn.net/hice1226/article/details/6717354 Mpeg-2的同步及时间恢复--STC,PCR,DTS,PTS 摘要:Mpeg-2同步及时间 ...

  10. SPRING IN ACTION 第4版笔记-第六章RENDERING WEB VIEWS-003- SPRING的GENERAL TAG LIBRARY简介及用<s:message>和ReloadableResourceBundleMessageSource实现国际化

    一. SPRING支持的GENERAL TAG LIBRARY 1. 二.用<s:message>和ReloadableResourceBundleMessageSource实现国际化 1 ...