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,一经查实,立即删除!

相关文章

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…

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

树-二叉树、满二叉树和完全二叉树 二叉树的定义&#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 前…

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

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

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(邮箱…

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

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

MoreUnit与MoreUnit

就在一年多以前&#xff0c;我写了一篇关于在Eclipse中使用JUnit的文章。 评论者之一推荐MoreUnit &#xff0c;以进一步提高测试效率。 尝试一下让我感到很高兴&#xff0c;并且我的自主神经系统立即记住了该插件的键盘快捷键…… 另外&#xff0c;在使用MoreUnit一段时间后&…

js html 导出word 不用activexobject,javascript下用ActiveXObject控件替换word书签,将内容导出到word后打印第2/2页...

javascript下用ActiveXObject控件替换word书签&#xff0c;将内容导出到word后打印第2/2页更新时间&#xff1a;2008年06月21日 22:57:31 作者&#xff1a;由于时间比较紧&#xff0c;没多的时候去学习研究上述工具包&#xff0c;现在用javascript操作ActiveXObject控件&…

平时二十三测

昨日AK&#xff0c; 今日垫底&#xff0c; 我简直是在坐过山车&#xff1b; 以后记住有返回值的函数一定要写返回值&#xff0c;不然全部输出0 题解: 第一题&#xff1a;全是-1&#xff0c; 是2^(n-1)-1,不会证&#xff0c;样例很明显&#xff1b; 对于有X个跟班的人&#xff0…

20181103_C#线程初探, BeginInvoke_EndInvoke

在C#中学习多线程之前, 必须要深刻的理解委托; 基本上所有的多线程都在靠委托来完成 一. 进程和线程: a) 进程和线程都是计算机的概念, 跟程序语言没有任何关系 b) 进程和线程都属于计算机操作系统自身控制和调度, 程序语言只有使用的份, 最终的控制权还是得操作系统说了算, …

【完成发布】Lazy Line Painter – 非常有趣的 jQuery 路径动画插件

Lazy Line Painter 是基于 Raphal&#xff08;一个用于在网页中绘制矢量图形的 Javascript 库&#xff09;的 jQuery 路径动画插件&#xff0c;能够把线条图案转换为吸引眼球的路径动画模式。 您可能感兴趣的相关文章 60款非常酷的 jQuery 幻灯片演示和下载15个款优秀的 jQuer…

python构建矩阵 x y_生成Python函数一半没问题,当前最正统的代码生成是什么样的?...

机器之心原创参与&#xff1a;思源大家都说深度神经网络能力很强&#xff0c;那么从函数注释生成函数代码&#xff0c;以及从函数代码总结函数注释这种最基础的代码任务到底能不能行&#xff1f;像 Python、Java 这样的通用高级语言&#xff0c;到底在代码生成上能达到什么水平…

福大软工 · 第七次作业 - 需求分析报告(404 Note Found队)

目录 组队后的团队项目的整体计划安排项目logo及思维导图项目logo思维导图产品思维导图产品思维导图-引导产品思维导图-后端数据处理、存储产品思维导图-短信识别产品思维导图-智能分析产品思维导图-壁纸生成产品思维导图-注册界面产品思维导图-登录界面产品思维导图-使用1产品…

Web设计前沿:CSS3 在网页设计中的20个惊艳应用

作为 CSS 的下一个版本&#xff0c;CSS3 给 Web 开发带来了革命性的影响。例如&#xff0c;以前很多需要图片呈现的界面效果&#xff0c;现在使用 CSS3 结合 HTML 就可以实现&#xff0c;CSS3 甚至还可以实现需要 JavaScript 才能实现的复杂动画效果。下面向大家展示 CSS3 圆角…

Websockets与Spring 4

我将整个厨盆放入一个小型Web应用程序中&#xff0c;此应用程序是我在该帖子中开发的一部分-Spring Boot&#xff0c;Spring Integration&#xff0c;RabbitMQ&#xff0c;最后是该帖子的主题&#xff0c;Spring MVC与Spring 4中的Websocket支持。 实时地震清单应用 最终的应用…

计算机算力英语怎么说,MIT警告深度学习正逼近算力极限,突破瓶颈会让人类成为上帝?...

原标题&#xff1a;MIT警告深度学习正逼近算力极限&#xff0c;突破瓶颈会让人类成为上帝&#xff1f;摩尔定律提出的时候&#xff0c;人们从来没有想到过芯片的算力会有到达极限的一天&#xff0c;至少从来没有想到芯片算力极限会这么快到来。MIT发出警告&#xff1a;算力将探…

推荐40个简单的 jQuery 导航插件和教程【下篇】

在这篇文章中&#xff0c;我为大家收集了40款非常棒的 jQuery 导航插件和教程。导航作为网站重要的组成部分&#xff0c;能够帮助用户找到他们想要的内容&#xff0c;因此导航设计的好坏决定了用户能够在你的网站停留更长的时间&#xff0c;浏览更多的内容。在下面的集合中&…

福大软工 · 第七次作业 - 需求分析报告

【 组长博客链接】 031602428 苏路明 【计划安排】 阶段主要任务时间任务内容1项目选题09.22 - 10.10确定选题内容&#xff0c;收集用户需求&#xff0c;明确定位&#xff0c;竞品分析&#xff0c;选题报告2需求分析10.11 - 11.4梳理需求&#xff0c;输出思维导图&#xff0c;原…

网站页面左右_广州网站优化的技巧是什么?

说到网站优化&#xff0c;大家都不陌生&#xff0c;但首先&#xff0c;我们知道为什么要优化网站吗?我们网站优化是为了改善网站在百度&#xff0c;搜狗等搜索引擎搜索结果排名中的网站页面&#xff0c;以增强搜索引擎的流量。下面拓王朝广州网站优化公司小编针对网站的优化技…