PAT L3-007 天梯地图

https://pintia.cn/problem-sets/994805046380707840/problems/994805051153825792

  

本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线;一条是最短距离的路线。题目保证对任意的查询请求,地图上都至少存在一条可达路线。

输入格式:

输入在第一行给出两个正整数N(2 ≤ N ≤ 500)和M,分别为地图中所有标记地点的个数和连接地点的道路条数。随后M行,每行按如下格式给出一条道路的信息:

V1 V2 one-way length time

其中V1V2是道路的两个端点的编号(从0到N-1);如果该道路是从V1V2的单行线,则one-way为1,否则为0;length是道路的长度;time是通过该路所需要的时间。最后给出一对起点和终点的编号。

输出格式:

首先按下列格式输出最快到达的时间T和用节点编号表示的路线:

Time = T: 起点 => 节点1 => ... => 终点

然后在下一行按下列格式输出最短距离D和用节点编号表示的路线:

Distance = D: 起点 => 节点1 => ... => 终点

如果最快到达路线不唯一,则输出几条最快路线中最短的那条,题目保证这条路线是唯一的。而如果最短距离的路线不唯一,则输出途径节点数最少的那条,题目保证这条路线是唯一的。

如果这两条路线是完全一样的,则按下列格式输出:

Time = T; Distance = D: 起点 => 节点1 => ... => 终点

输入样例1:

10 15
0 1 0 1 1
8 0 0 1 1
4 8 1 1 1
5 4 0 2 3
5 9 1 1 4
0 6 0 1 1
7 3 1 1 2
8 3 1 1 2
2 5 0 2 2
2 1 1 1 1
1 5 0 1 3
1 4 0 1 1
9 7 1 1 3
3 1 0 2 5
6 3 1 2 1
5 3

输出样例1:

Time = 6: 5 => 4 => 8 => 3
Distance = 3: 5 => 1 => 3

输入样例2:

7 9
0 4 1 1 1
1 6 1 3 1
2 6 1 1 1
2 5 1 2 2
3 0 0 1 1
3 1 1 3 1
3 2 1 2 1
4 5 0 2 2
6 5 1 2 1
3 5

输出样例2:

Time = 3; Distance = 4: 3 => 2 => 5

代码:

ACACAC

#include <bits/stdc++.h>
using namespace std;const int inf = 0x3f3f3f3f;
int N, M, st, en;
int mp[550][550], tim[550][550];
int vis[550], see[550], pre[550], num[550];
int dis[550];
int coos[550], nx[550];
vector<int> v[550];
int ans1, ans2;void dijkstra(int act) {dis[act] = 0;pre[act] = -1;num[act] = 1;int temp = act;for(int i = 0; i < N; i ++) {int minn = inf;for(int j = 0; j < N; j ++) {if(vis[j]) continue;if(dis[j] < minn || (dis[j] == minn && num[j] > num[temp])) {temp = j;minn = dis[j];}}vis[temp] = 1;for(int k = 0; k < N; k ++) {if(vis[k]) continue;if(dis[k] > dis[temp] + mp[temp][k]) {dis[k] = dis[temp] + mp[temp][k];num[k] = num[temp] + 1;pre[k] =  temp;} else if(dis[k] == dis[temp] + mp[temp][k] && num[k] > num[temp] + 1) {num[k] = num[temp] + 1;pre[k] = temp;}}}ans1 = dis[en];
}void Dijkstra(int act) {coos[act] = 0;nx[act] = -1;int temp = act;for(int i = 0; i < N; i ++) {int minn = inf;for(int j = 0; j < N; j ++) {if(see[j]) continue;if(coos[j] < minn || (coos[j] == minn && dis[j] > dis[temp])) {temp = j;minn = coos[j];}}see[temp] = 1;for(int k = 0; k < N; k ++) {if(see[k]) continue;if(coos[k] > coos[temp] + tim[temp][k]) {coos[k] = coos[temp] + tim[temp][k];dis[k] = dis[temp] + mp[temp][k];nx[k] = temp;} else if(coos[k] == coos[temp] + tim[temp][k] && dis[k] > dis[temp] + mp[temp][k]) {dis[k] = dis[temp] + mp[temp][k];nx[k] = temp;}}}ans2 = coos[en];}int main() {memset(vis, 0, sizeof(vis));memset(see, 0, sizeof(see));memset(dis, inf, sizeof(dis));memset(mp, inf, sizeof(mp));memset(tim, inf, sizeof(tim));memset(coos, inf, sizeof(coos));scanf("%d%d", &N, &M);for(int i = 0; i < M; i ++) {int uu, vv, dir, len, t;scanf("%d%d%d%d%d", &uu, &vv, &dir, &len, &t);if(dir == 0) {v[uu].push_back(vv);v[vv].push_back(uu);mp[uu][vv] = mp[vv][uu] = len;tim[uu][vv] = tim[vv][uu] = t;} else {v[uu].push_back(vv);mp[uu][vv] = len;tim[uu][vv] = t;}}scanf("%d%d", &st, &en);string s1 = "", s2 = "";dijkstra(st);Dijkstra(st);stack<int> s3, s4;bool same = true;int n1 = en, n2 = en;vector<int> v1, v2;while(n1 != -1) {v1.push_back(n1);n1 = pre[n1];}while(n2 != -1) {v2.push_back(n2);n2 = nx[n2];}if(v1.size() != v2.size()) same = false;else {int m = v1.size();for(int i = 0; i < m; i ++) {if(v1[i] != v2[i]) {same = false;break;}}}int mintime = ans2;int minway = ans1;if(!same) {printf("Time = %d: ", mintime);stack<int> s2;int lastt = en;while(lastt != -1) {s2.push(lastt);lastt = nx[lastt];}printf("%d", s2.top());s2.pop();while(!s2.empty()) {printf(" => %d", s2.top());s2.pop();}printf("\n");printf("Distance = %d: ", minway);stack<int> s1;int last = en;while(last != -1) {s1.push(last);last = pre[last];}printf("%d", s1.top());s1.pop();while(!s1.empty()) {printf(" => %d", s1.top());s1.pop();}} else {printf("Time = %d; Distance = %d: ", mintime, minway);stack<int> s1;int last = en;while(last != -1) {s1.push(last);last = pre[last];}printf("%d", s1.top());s1.pop();while(!s1.empty()) {printf(" => %d", s1.top());s1.pop();}}return 0;
}
View Code

WA 掉的 

#include <bits/stdc++.h>
using namespace std;const int inf = 0x3f3f3f3f;
int N, M, st, en;
int mp[550][550], tim[550][550];
int vis[550], see[550], pre[550], num[550];
int dis[550];
int coos[550], nx[550];
vector<int> v[550];void dijkstra(int act) {dis[act] = 0;pre[act] = -1;num[act] = 1;int temp = act;for(int i = 0; i < N; i ++) {int minn = inf;for(int j = 0; j < N; j ++) {if(vis[j]) continue;if(dis[j] < minn || (dis[j] == minn && num[j] > num[temp] + 1)) {temp = j;minn = dis[j];}}vis[temp] = 1;for(int k = 0; k < N; k ++) {if(vis[k]) continue;if(dis[k] > dis[temp] + mp[temp][k]) {dis[k] = dis[temp] + mp[temp][k];num[k] = num[temp] + 1;pre[k] =  temp;} else if(dis[k] == dis[temp] + mp[temp][k] && num[k] > num[temp] + 1) {num[k] = num[temp] + 1;pre[k] = temp;}}}
}void Dijkstra(int act) {coos[act] = 0;nx[act] = -1;int temp = act;for(int i = 0; i < N; i ++) {int minn = inf;for(int j = 0; j < N; j ++) {if(see[j]) continue;if(coos[j] < minn || (coos[j] == minn && dis[j] > dis[temp] + mp[temp][j])) {temp = j;minn = coos[j];}}see[temp] = 1;for(int k = 0; k < N; k ++) {if(see[k]) continue;if(coos[k] > coos[temp] + tim[temp][k]) {coos[k] = coos[temp] + tim[temp][k];nx[k] = temp;} else if(coos[k] == coos[temp] + tim[temp][k] && dis[k] > dis[temp] + mp[temp][k]) {nx[k] = temp;}}}
}int main() {memset(vis, 0, sizeof(vis));memset(see, 0, sizeof(see));memset(dis, inf, sizeof(dis));memset(mp, inf, sizeof(mp));memset(tim, inf, sizeof(tim));memset(coos, inf, sizeof(coos));scanf("%d%d", &N, &M);for(int i = 0; i < M; i ++) {int uu, vv, dir, len, t;scanf("%d%d%d%d%d", &uu, &vv, &dir, &len, &t);if(dir == 0) {v[uu].push_back(vv);v[vv].push_back(uu);mp[uu][vv] = mp[vv][uu] = len;tim[uu][vv] = tim[vv][uu] = t;} else {v[uu].push_back(vv);mp[uu][vv] = len;tim[uu][vv] = t;}}scanf("%d%d", &st, &en);string s1 = "", s2 = "";dijkstra(st);Dijkstra(st);stack<int> s3, s4;bool same = false;int n1 = en, n2 = en;vector<int> v1, v2;while(n1 != -1) {v1.push_back(n1);n1 = pre[n1];}while(n2 != -1) {v2.push_back(n2);n2 = nx[n2];}if(v1.size() != v2.size()) same = false;else {int m = v1.size();for(int i = 0; i < m; i ++) {if(v1[i] == v2[i]) {same = true;break;}}}int mintime = coos[en];int minway = dis[en];if(!same) {printf("Time = %d: ", mintime);stack<int> s2;int lastt = en;while(lastt != -1) {s2.push(lastt);lastt = nx[lastt];}printf("%d", s2.top());s2.pop();while(!s2.empty()) {printf(" => %d", s2.top());s2.pop();}printf("\n");printf("Distance = %d: ", minway);stack<int> s1;int last = en;while(last != -1) {s1.push(last);last = pre[last];}printf("%d", s1.top());s1.pop();while(!s1.empty()) {printf(" => %d", s1.top());s1.pop();}} else {printf("Time = %d; Distance = %d: ", mintime, minway);stack<int> s1;int last = en;while(last != -1) {s1.push(last);last = pre[last];}printf("%d", s1.top());s1.pop();while(!s1.empty()) {printf(" => %d", s1.top());s1.pop();}}return 0;
}

  差两个测试点没过 但是实在是写的头大 如果有旁友知道我错的点请私信我!谢谢!!!!

 

转载于:https://www.cnblogs.com/zlrrrr/p/10599541.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365130.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaFX中的塔防(4)

好的&#xff0c;到目前为止&#xff0c;我们已经创建了一个TileMap&#xff0c;将其显示在屏幕上&#xff0c;并使其在第一部分中可编辑。 在第二部分中&#xff0c;我们使用A *算法实现了攻击路径的计算&#xff0c;并使敌人跟随该路径。 在第三部分中&#xff0c;我们创建了…

Two.js – 为现代浏览器而生的 2D 绘图 API

Two.js 是面向现代 Web 浏览器的一个二维绘图 API。Two.js 可以用于多个场合&#xff1a;SVG&#xff0c;Canvas 和 WebGL&#xff0c;旨在使平面形状和动画的创建更方便&#xff0c;更简洁。 Two.js 有一个内置的动画循环&#xff0c;可搭配其他动画库。Two.js 包含可伸缩矢量…

apache arm 交叉编译_MacOS 下交叉编译的折腾笔记

这是这个系列 “折腾笔记” 的第一篇&#xff0c;希望能用更直白的方式去展现交叉编译的时候做了些什么。因此&#xff0c;这个教程并不是最佳实践&#xff0c;但是可以让小伙伴们有一个更直白的理解。之后&#xff0c;我会把笔记的重点放在 bazel 上交叉编译的最佳实践&#x…

python - 使用traceback获取详细的异常信息

try: 1/0except Exception,e: print e 输出结果是integer division or modulo by zero&#xff0c;只知道是报了这个错&#xff0c;但是却不知道在哪个文件哪个函数哪一行报的错。下面使用traceback模块 import tracebacktry: 1/0except Exception,e: traceback.print_exc() 输…

计算机科学研究生规划,2019计算机考研备考:计算机科学与技术研究方向及复习规划...

考研之路永远都不是轻松着度过的&#xff0c;想要在这条道路上稳稳妥妥的走完&#xff0c;并到达设立在远处的目标&#xff0c;了解目标专业的各项考研备考信息是第一步。新东方在线为大家整理了2019计算机考研备考&#xff1a;计算机科学与技术研究方向及复习规划&#xff0c;…

快速的远程服务测试

测试与远程服务交互的代码通常很困难。 有很多折衷因素会影响您可以编写哪些测试以及要编写的测试数量。 在大多数情况下&#xff0c;您对从服务中获取的数据的控制为零&#xff0c;这使得断言至少很难说。 不久前&#xff0c;我使用VCR库针对远程服务编写了一些Ruby测试。 VC…

树-二叉树、满二叉树和完全二叉树

树-二叉树、满二叉树和完全二叉树 二叉树的定义&#xff1a; &#xff08;1&#xff09;当n0时&#xff0c;为空树&#xff1b; &#xff08;2&#xff09;当n>0时&#xff0c;是由一个根结点和称为根结点的左、右子树构成&#xff0c;并且两颗子树互不相交。 满二叉树&…

Codrops 优秀教程:基于 CSS3 的全屏网页过渡特效

向大家分享一个来自 Codrops 的基于 CSS3 实现的全屏网页过渡特效。页面初始布局是四个盒子&#xff0c;点击其中一个会扩张到全屏&#xff0c;其它的会淡出隐藏&#xff1b;关闭当前视图的时候又恢复到初始状态。 您可能感兴趣的相关文章-prefix-free&#xff1a;帮你从 CSS 前…

上海职称英语计算机取消,小编简析2017年职称英语考试是否取消

近日出台的《关于深化人才发展体制机制改革的意见》(以下简称《意见》)直接提出了我国将改革职称制度和职业资格制度&#xff0c;对职称外语和计算机应用能力考试不作统一要求&#xff1b;探索高层次人才等职称直聘办法。《意见》出台的是2016年职称英语考试前几天&#xff0c;…

elasticsearch 条件去重_elasticsearch 笔记四 之聚合查询之去重计数、基础统计、百分位、字符串统计...

这一节笔记还是聚合查询&#xff0c;以下是本节目录&#xff1a;去重统计 cardinality基础统计 stats百分位 percentiles字符串统计 string_stats1、去重统计 cardinality去重统计&#xff0c;就是统计某个字段的值&#xff0c;去重后的数量。先导入如下数据&#xff1a;PUT /e…

openstack基础环境

主机环境&#xff1a; centos7.5 ip:192.168.2.11 修改主机名&#xff0c;修改后主机名不得再更改 yum install chrony -y &#xff08;控制节点和计算节点都要装&#xff09;编辑 vi /etc/chrony.conf 文件&#xff0c;按照你环境的要求&#xff0c;对下面的键进行添加&#x…

Java内存模型又回来了

Java内存模型已经被遗忘了九年多了&#xff0c;但是大多数开放源代码Java支持者都希望对其进行现代化&#xff0c;并专注于并发&#xff0c;因为Java内存模型中引入的过程仅朝现代化迈出了一步 。 一个JEP&#xff08;JDK增强建议&#xff09;&#xff0c;编号188 &#xff0c…

Redis缓存设计模式与失效策略

大家好&#xff0c;我是升仔 引言 Redis作为一个灵活的键值数据库&#xff0c;广泛用于实现高性能缓存解决方案。理解其缓存设计模式和失效策略对于开发高效、可靠的应用程序至关重要。 缓存设计模式 缓存 aside&#xff08;旁路缓存&#xff09;: 基本原理&#xff1a;应用…

【Python 19】BMR计算器3.0(字符串分割与格式化输出)

1.案例描述 基础代谢率&#xff08;BMR&#xff09;&#xff1a;我们安静状态下&#xff08;通常为静卧状态&#xff09;消耗的最低热量&#xff0c;人的其他活动都建立在这个基础上。 计算公式&#xff1a; BMR&#xff08;男&#xff09; &#xff08;13.7*体重kg&#xff0…

经典案例:2012年最佳25个响应式网站设计作品《下篇》

2012年&#xff0c;响应式网站设计成为主流&#xff0c;这个概念由著名网页设计师 Ethan Marcotte 在2010年5月份提出&#xff0c;其目标是要让设计的网站能够响应用户的行为&#xff0c;根据不同终端设备自动调整尺寸。 响应式设计不再只是一个概念&#xff0c;众多大公司也把…

发布Akka Toolkit 2.3

最近宣布了Akka工具包 2.3.0版本的发布。 Akka是一个非常有用的工具包和运行时&#xff0c;用于在JVM上构建高度并发&#xff0c;分布式和容错的事件驱动应用程序。 它是分布式的&#xff0c;并提供了Actor&#xff0c;Future和STM等高级抽象。 它的新版本在2.2.0发布之后八个…

npm git 遇到的问题解决笔记

npm 报错 在无可奈何时可以试一试这个命令 npm cache clean --force commit 是如果报这样的错 删掉项目中.git/index.lock文件再commit即可解决问题 1.git config --global user.email xxx163.com 2.git config --global user.name xxx 3.ssh-keygen -t rsa -C xxx163.com(邮箱…

计算机技术应用广泛 属于科学计算方面的是,中国大学MOOC: 计算机技术应用广泛,以下属于科学计算方面的是哪个? 答案:火箭轨道计算...

相关问题端口的作用是什么&#xff1f;基于冰山模型的人才选拔模式&#xff0c;在应届生招聘、员工晋升等工作中都会应用&#xff0c;以下属于冰山模型中提到的考察因素的是创意的结果和过程不一定能够准确面对商业应用&#xff0c;创新则更需要( )和( )的保障。: 创意 结果 过…

新风系统风速推荐表_新风系统风速标准及与噪音的关系

原标题&#xff1a;新风系统风速标准及与噪音的关系如今&#xff0c;新风系统不仅能够对室内空气进行净化&#xff0c;还能够为室内提供源源不断的新鲜空气&#xff0c;真可谓空净产品的实力担当。新风系统不同于其它空气净化设备&#xff0c;只有进行合理的选择安装才能够更好…

Docverter – 文本文件轻松转换为 PDF,Docx 和 ePub 文件

Docverter 让你无需建立自己的文档转换工具就能够进行文件转换。Docverter 包装了几个开源项目&#xff0c;使您的文档能够进行完美的转换。借助一个简单的 HTTP API &#xff0c;把使用 HTML&#xff0c;Markdown, 或者 LaTeX 编写的纯文本文件转换为 DOCX&#xff0c;PDF&…