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

输入格式:

输入说明:输入数据的第1行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0~(N−1);M是高速公路的条数;S是出发地的城市编号;D是目的地的城市编号。随后的M行中,每行给出一条高速公路的信息,分别是:城市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

题解:Dijsktra求解,然后多一个当路径相等时,按价格小的来

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define INF 0x3f3f3f using namespace std; int Map[505][505];
int Cost[505][505];
int dis[505],MCost[505];
bool vis[505]= {false};
int Min;
void Dijkstra(int v0,int v,int d) {
dis[v0]=0;
vis[v0]=true;
for(int i=0; i<v; i++) {
Min=INF;
for(int k=0; k<v; k++) {
if(!vis[k]) {
if(dis[k]<Min) {
Min=dis[k];
v0=k;
}
}
}
vis[v0]=true;
for(int k=0; k<v; k++) {
if(!vis[k]&&Min+Map[v0][k]<dis[k]) {
dis[k]=Min+Map[v0][k];
MCost[k]=MCost[v0]+Cost[v0][k];
} else if(!vis[k]&&Min+Map[v0][k]==dis[k]&&MCost[k]>MCost[v0]+Cost[v0][k]) {
MCost[k]=MCost[v0]+Cost[v0][k];
}
}
}
}
int main() {
int v,e,s,d;
scanf("%d %d %d %d",&v,&e,&s,&d);
for(int i=0; i<v; i++)
for(int j=0; j<v; j++) {
Map[i][j]=Map[j][i]=INF;
Cost[i][j]=Cost[j][i]=INF;
//设置为双向连通,并初始化为最大值
}
for(int i=0; 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=0; i<v; i++) {
dis[i]=Map[i][s];//Map[i][s]为点i到起始点的距离
MCost[i]=Cost[i][s];
}
Dijkstra(s,v,d);
cout<<dis[d]<<" "<<MCost[d]<<endl;
return 0;
}

7-36 旅游规划 (25 分(Dijkstra)的更多相关文章

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

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

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

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

  3. PAT 07-图6 旅游规划 (25分)

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

  4. PTA 旅游规划(25 分)

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

  5. pat06-图5. 旅游规划(25)

    06-图5. 旅游规划(25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该 ...

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

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

  7. L2-001 紧急救援 (25 分)

    L2-001 紧急救援 (25 分)   作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快 ...

  8. 1003 Emergency (25 分)

    1003 Emergency (25 分) As an emergency rescue team leader of a city, you are given a special map of y ...

  9. ACM程序设计选修课——Problem F:(ds:图)旅游规划(优先队列+SPFA)

    问题 F: (ds:图)旅游规划 时间限制: 1 Sec  内存限制: 128 MB 提交: 14  解决: 4 题目描述 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路 ...

随机推荐

  1. css中字体大小在不同浏览器兼容性问题

    css中使用font-size设定字体大小,不同浏览器的字体height一样,但是width不同,比如在火狐和谷歌中,font-size:20px,字体的高度变为20px,但是谷歌的字体宽度比火狐长 ...

  2. linux svn yum 安装、开机自启动

    1.查询是否安装 rpm -qa subversion

  3. linux命令学习笔记(33):df 命令

    linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了 多少空间,目前还剩下多少空间等信息. .命令格式: df [选项] [文件] .命令 ...

  4. CDH5.12.1 安装部署

    ###通过http://192.168.50.200:7180/cmf/login 访问CM控制台 4.CDH安装 4.1CDH集群安装向导 1.admin/admin登陆到CM 2.同意licens ...

  5. 1091 Acute Stroke (30)(30 分)

    One important factor to identify acute stroke (急性脑卒中) is the volume of the stroke core. Given the re ...

  6. 洛谷P2530 [SHOI2001]化工厂装箱员

    题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须把不 ...

  7. python反复执行某个命令

    #! /usr/bin/env python #coding=utf-8 # 以需要的时间间隔执行某个命令    import time, os    def re_exe(cmd, inc = 60 ...

  8. Mycat概述

    Mycat是什么?从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了MySQL协议的的Server,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用 ...

  9. bzoj 3376 [Usaco2004 Open]Cube Stacking 方块游戏——带偏移量的并查集

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3376 带偏移量的并查集. #include<iostream> #include ...

  10. java 最佳实践

    一: 不要直接new一个thread,应当使用线程池.使用线程池的时候应当对线程数量大小合理设置,一般最大不超过50个,当然还需要考虑你的IO和CPU,怎么分析网上搜搜吧. 二:容器类变量,如果变化比 ...