我得到一个图,G = (V, E),它是正加权的、有向的和非循环的。我要设计一个在 O(k(m + n)) 中运行的算法,用于报告从 s 到 t 的 k 边最短路径。k 边最短路径定义为从 s 到 t 的具有 k 条边的路径,并且对于从 s 到 t 的所有路径,该路径的总权重也必须是最小的。
由于 BFS 不能单独用于查找最短路径(除非权重相等),我认为运行时间意味着使用 BFS 查找具有 k 个边的路径。让我失望的是 k,因为我认为这意味着执行 BFS k 次。
我可能的想法是从源运行 BFS 以查找所有可能的 k-link 路径。通过跟踪沿途的关卡并在将每个节点添加到队列时存储总路径权重,我可以找到所有可能的 k-link 路径及其权重。显然,如果我遇到具有较低路径权重的较低级别的目的地,则根据定义不存在 k 边最短路径。如果有超过 k 个边的路径总权重较小,那该怎么办?它也不是 O(k(m + n))。任何有用的提示将不胜感激。