繁体   English   中英

无向图中给定两个顶点之间的最长简单路径

[英]Longest simple path between given two vertices in an undirected graph

输入: n 节点无向图G(V,E) V 中的节点st 正整数k

问题: G 中的 s 和 t 之间是否有一条至少包含 k 条边的简单路径?

我知道这个问题是 NP-hard 问题,但问题是如何以及使用哪种算法,我应该解决这个问题吗?

到目前为止,我已经使用了 BFS 算法,但我认为它不是我应该使用的算法。 此时我不知道如何继续。 我不太确定我是否能找到这个问题的解决方案。 近似值也可以。

这可以通过 BFS 的变体来解决:不是在队列中存储节点,而是存储路径。 另一个区别是,我们不会忽略已经访问过的节点,而是仅忽略已包含在当前路径中的节点。

  • 使用单个路径初始化一个队列,仅包含节点s
  • 当队列非空时:
    • 从队列中轮询path u成为路径中的最后一个节点。
    • 如果u = t
      • 如果path的节点数至少为k + 1 ,则path是一个解; 返回结果“true”。
    • 否则,如果u != t
      • 对于u每个不在path邻居v ,通过将v附加到path来构造一个新path ,并将其插入队列中。
  • 如果循环在没有找到解的情况下终止,则不存在; 返回结果“false”。

完全相同的解决方案使用 DFS 而不是 BFS,通过用堆栈替换队列。 在这种情况下,堆栈通常会使用较少的内存,但不一定会找到最短的解决方案。 由于您只想在这样的路径存在时回答真/假,因此不需要找到最短的,因此 DFS 可能更好。

暂无
暂无

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

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