繁体   English   中英

给定一个加权图和自然数 k,如何找到可以除以 k 的从节点 s 到 t 的最便宜的路径?

[英]Given a weighted graph and natural number k how to find the cheapest path from node s to t that can be divided by k?

给定一个不包括负循环的加权图 G=(V,E)、一个自然数 k 和两个顶点:s,t。

我怎样才能找到从 s 到 t 的最便宜的路线,它的长度可以被 k 整除?

准备一个具有顶点 V × {0, 1, ..., n−1} 的新图 G',并且对于 G 中长度为 ℓ 的每个弧 v → w,弧 (v, x) → (w, (x + ℓ) mod k)。 然后使用 Dijkstra 算法找到从 (s, 0) 到 (t, 0) 的最短路径。

将 BFS 与优先级队列一起使用,以便始终检查最短的状态(= 来自s路径)。 与普通的 Dijkstra 不同,您的状态是完整的路径,您可以在遇到已经访问过的顶点时重新访问它们。

我无法证明这样的算法是最优的,但至少它应该是正确的,如果存在的话,总是返回一个有效的最短路径答案。 某些图和 K 值的运行时间会非常长,如果没有从st的 k 整除路径但存在路径长度可被 k 整除循环,则算法可能根本无法完成。 您可以先使用初步 DFS 找到并过滤掉它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM