[英]Finding simple path between two vertices in a tree (undirected simple graph)
[英]Longest simple path between given two vertices in an undirected graph
输入: n 节点无向图G(V,E) ; V 中的节点s和t ; 正整数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
,并将其插入队列中。完全相同的解决方案使用 DFS 而不是 BFS,通过用堆栈替换队列。 在这种情况下,堆栈通常会使用较少的内存,但不一定会找到最短的解决方案。 由于您只想在这样的路径存在时回答真/假,因此不需要找到最短的,因此 DFS 可能更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.