2016年清华软院保研机试第2题(最短路)

机考题二• 40 分, LeetCode medium 档次• 从控制台输入n+1 行,前n 行每行3 个整数,形如“A B d”,表示从节点A 到节点B 距离为d(双向)。第n+1 行形如“A B”,表示求A 到B 的最短距离。输出此最短距离。• 例如:1 42 342 789 41 789 91 789输出7• BFS、动态规划、剪枝、图---------...
摘要由CSDN通过智能技术生成

机考题二

• 40 分, LeetCode medium 档次

• 从控制台输入n+1 行,前n 行每行3 个整数,形如“A B d”,表示从节点A 到节点B 距离为d(双向)。第n+1 行形如“A B”,表示求A 到B 的最短距离。输出此最短距离。

• 例如:

1 42 3
42 789 4
1 789 9
1 789

输出

7

• BFS、动态规划、剪枝、图

--------------------------------------------------------------------------------

思路

没有看懂南大同学提示里写的“BFS、动态规划、剪枝”是什么意思,也看到一篇博文说是用0-1规划做的,不是很懂(求教)?

我的做法是首先把输入的节点的编号存到一个数组vset中,再将vset排序,然后排好序的vset去重得到n个不重复的节点,重新映射到编号0~n-1,然后再用标准的Dijkstra解一个最短路问题。

记图的节点个数为n,边条数为m(记号与题面中不一样),节点重编号复杂度O(mlogm),Dijkstra复杂度为O(n^2),如果认为m~n^2的话,总的复杂度就是O(mlogm) = O(mlogn)。

--------------------------------------------------------------------------------

代码

#include<cstdio&g
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值