Dijkstra的算法以所有顶点为源

问题描述

在一个标记为1 .... N的城镇中有[N]个位置。系统会为您提供一条街道S(| S | = M)的列表,其中一条街道连接了城镇中的两个位置,并且具有关联的距离。您还提供了城镇中房屋的清单H和城镇中所有COVID-19测试中心的清单C。对于每个房屋,到最近的测试中心的距离最短。解决O(M * log N)时间的问题。

我看到这是一个图形问题,我可以从街道列表中构建无向图,因为可以将街道视为一条边缘,其中权重是两个位置之间的距离。

因为该问题想找到所有房屋到测试中心的最短距离,所以我想为H中的每个房屋运行Dijkstra算法。但是,这将使我的运行时间为O(| H | * MlogN)和我们想要一个O(MlognN)的运行时。为了实现此运行时间,是否可以对Dijkstra的算法进行任何修改?我必须将每个房屋都视为源顶点才能找到最短的距离,但我看不出在所需的时间复杂度中可以采取的任何方法。

解决方法

使用从每个中心而不是房屋初始化的Dijkstra。

将所有房屋标记为未访问,将所有中心标记为0

将所有中心添加到PQ。

继续dijkstra ...

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...