【发布时间】:2021-12-18 17:25:11
【问题描述】:
令 G=(V,E) 为有向图。设 V 中的 s 为顶点。设 V 中的 k 是某个顶点,使得 k≠s。给定一条路径 p,将其成本定义为 p 中的边数。但是,如果路径经过顶点 k,则在访问过顶点 k 之后使用的每条边都计为 5。
对于 V 中的每个 v,用 c(s,v) 表示从 s 到 v 的最便宜路径的成本。建议一个有效的 用于计算 V 中的每个 v 的值 c(s,v) 的算法。
我也不能使用 Dijkstra 算法。
我最初的想法是使用单源最短路径算法。
这是我的尝试:
算法:
- 使用 BFS 计算从 s 到 v 的所有路径(未加权),并将路径存储在一个列表中。
- 遍历列表中的每个路径,如果 k 在路径中,则计算 k 之后的节点数(将其分配给变量 num),并将 4*num 添加到步骤 1 中已计算的总和。
- 选择结果数最小的路径,然后返回。
我认为我可以做得比这更好,因为在最坏的情况下,我们将有 |V|/2 条路径,所以时间复杂度可以是 O(n^2)。
我想听听一些改进任务的建议。
非常感谢!
【问题讨论】:
标签: algorithm graph depth-first-search breadth-first-search shortest-path