| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 天梯赛 L3-007 天梯地图(Dijkstra变形:多权重,保存路径) -> 正文阅读 |
|
[数据结构与算法]天梯赛 L3-007 天梯地图(Dijkstra变形:多权重,保存路径) |
题目描述: 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线;一条是最短距离的路线。题目保证对任意的查询请求,地图上都至少存在一条可达路线。 输入格式:
其中
V
1
V_1
V1? 和
V
2
V_2
V2? 是道路的两个端点的编号(从
0
0
0 到
N
?
1
N-1
N?1 );如果该道路是从
V
1
V_1
V1? 到
V
2
V_2
V2? 的单行线,则 输出格式: 首先按下列格式输出最快到达的时间 T T T 和用节点编号表示的路线:
然后在下一行按下列格式输出最短距离 D D D 和用节点编号表示的路线:
如果最快到达路线不唯一,则输出几条最快路线中最短的那条,题目保证这条路线是唯一的。而如果最短距离的路线不唯一,则输出途径节点数最少的那条,题目保证这条路线是唯一的。 如果这两条路线是完全一样的,则按下列格式输出:
输入样例1:
输出样例1:
输入样例2:
输出样例2:
思路: 数据范围 500 500 500 做两次 Dijkstra 分别求两个最短路径的复杂度是可以接受的。经典的 Dijkstra 只能维护长度一个权值,并且不能记录路径。所以需要稍加修改,根据双权值来更新路径,并且记录每个结点是从哪个结点转移而来。 其实这道题总共有三个权值:长度、时间、途经结点数。但是最终要维护两条最优路径,所以肯定是没法通过一次 Dijkstra 来解决的。一个最容易想到的方法就是,写两个不同版本的 Dijkstra 函数。但是这两个函数相似度是非常高的,所以我就想想办法代码重用。后来发现,这两个函数中,只有所操作的数组是不同的,于是就通过指针来传递参数,最终只用了一个 Dijkstra 函数维护了两条路径。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 12:00:23- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |