查看: 4081| 回复: 15
跳转到指定楼层
上一主题 下一主题
收起左侧

[树/链表/图] 讨论一道最短路径问题

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
最近碰到一道题,不知道该用什么方法做比较好。
有一个n个点条边的无向图,其中k个点是加油站。现在需要求出n个点中每个点来说距离最近的一个加油站的距离。若这个点是加油站,那么最短距离就是0。数据保证每个点都能至少到达一个加油站。没有负边或者环。

我尝试的方法是对于k个加油站每个加油站用一个Dijkstra算法求这个加油站到其它点的最短距离,然后对于每个点来说比较k个最短距离求出真正的最短距离。但时间复杂度太高了。想问一下大家有什么好的想法吗,谢谢



上一篇:一道数组题,如何降到小于n^2的复杂度以下
下一篇:讨论一道表达式问题
全局:
玛玛哈哈 发表于 2021-1-29 03:52
感谢回复,我觉得这个可行,我去试一下

其实实现的时候完全没必要把这个虚拟节点给弄出来。第一步用Dijkstra的时候,直接把所有加油站扔进heap里面,每个距离都是0就好了。也类似于多起点的Dijkstra,也有点像平时会用到的多起点BFS。

评分

参与人数 3大米 +5 收起 理由
14417335 + 2
heiyu + 2 给你点个赞!
玛玛哈哈 + 1 赞一个

查看全部评分

回复

使用道具 举报

推荐
红A 2021-1-29 04:18:35 | 只看该作者
全局:
不知道小帅 发表于 2021-1-29 03:57
其实实现的时候完全没必要把这个虚拟节点给弄出来。第一步用Dijkstra的时候,直接把所有加油站扔进heap里 ...

聪明,蹲一波其他人的代码一会来学习下。
回复

使用道具 举报

全局:
玛玛哈哈 发表于 2021-1-29 03:41
n最多有50000个点,n^3的时间复杂度可能承受不起

这肯定是不行的。其实这个题目有个trick,你假设一个虚拟节点,这个节点到所有加油站的距离都是0。这样子的话,从这个虚拟的点到每个点的距离,就是那个点到加油站的最短距离。可以仔细品一下。

评分

参与人数 1大米 +1 收起 理由
玛玛哈哈 + 1 赞一个

查看全部评分

回复

使用道具 举报

全局:
感觉像bellman ford 算法?

评分

参与人数 2大米 +2 收起 理由
14417335 + 1
玛玛哈哈 + 1 赞一个

查看全部评分

回复

使用道具 举报

🔗
红A 2021-1-29 03:38:03 | 只看该作者
全局:
这个是multi source shortest path
使用Floyd warshall就可以了

评分

参与人数 1大米 +1 收起 理由
玛玛哈哈 + 1 赞一个

查看全部评分

回复

使用道具 举报

🔗
红A 2021-1-29 03:38:26 | 只看该作者
全局:
shaoli12800 发表于 2021-1-29 03:32
感觉像bellman ford 算法?

Floyd warshall

评分

参与人数 1大米 +1 收起 理由
玛玛哈哈 + 1 赞一个

查看全部评分

回复

使用道具 举报

🔗
 楼主| 玛玛哈哈 2021-1-29 03:41:54 | 只看该作者
全局:
红A 发表于 2021-1-29 03:38
这个是multi source shortest path
使用Floyd warshall就可以了

n最多有50000个点,n^3的时间复杂度可能承受不起
回复

使用道具 举报

🔗
 楼主| 玛玛哈哈 2021-1-29 03:42:17 | 只看该作者
全局:
shaoli12800 发表于 2021-1-29 03:32
感觉像bellman ford 算法?

这个是没有负权重的边的
回复

使用道具 举报

全局:
红A 发表于 2021-1-29 03:38
这个是multi source shortest path
使用Floyd warshall就可以了

其实没必要,速度会略慢。假设一个虚拟节点,到所有加油站距离都是0。这样的话只需要求以这个虚拟节点为起点,到所有节点的最短路径。这个最短路径,就是这些节点到加油站的最短距离。

评分

参与人数 2大米 +3 收起 理由
14417335 + 2
玛玛哈哈 + 1 赞一个

查看全部评分

回复

使用道具 举报

🔗
 楼主| 玛玛哈哈 2021-1-29 03:52:53 来自APP | 只看该作者
全局:
不知道小帅 发表于 2021-01-28 11:48:06
这肯定是不行的。其实这个题目有个trick,你假设一个虚拟节点,这个节点到所有加油站的距离都是0。这样子的话,从这个虚拟的点到每个点的距离,就是那个点到加油站的最短距离。可以仔细品一下。
感谢回复,我觉得这个可行,我去试一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表