有没有从s-t经过特殊节点的路径?
is there a path from s-t that passes through special node?
我在这个网站上看到过这个问题的一些变体,但不完全是这个。
问题
我有一个未加权的图 G=(V,E),最好我需要制定一个适用于有向图和无向图的解决方案。
V的一个子集是W,这些是特殊的节点。
我需要找出是否有可能找到一条从起始节点 s 到结束节点 t 的路径,该路径经过 W 中的一个或多个特殊节点。这是一个节点不重复的简单路径,并且它在多项式时间内必须 运行
所以我只需要输出'true'或'false'。
我目前的尝试
首先,我认为对于每个特殊节点 i W,我会 运行 一个可以找到节点 w 的 bfs,然后 运行 从节点 w 到 t 的新 bfs。
大致是这样的:
for w in W:
firstpath = bfs from s to w
secondPath = bfs from w to t (that does not touch nodes in firstpath)
if firstpath + second == path from s to t:
return True
else:
continue
但在这里,问题可能是“firstpath”可能会阻塞从 w 到 t 的可能路径。
任何可以保证没有“节点冲突”的问题的多项式算法的想法
对于无向图,我们可以尝试 W 中的所有 w,使用最大流寻找从 w 到 s 和 t 的两条 node-disjoint 路径。不幸的是,我不确定这是否可以推广到有向图。
我在这个网站上看到过这个问题的一些变体,但不完全是这个。
问题
我有一个未加权的图 G=(V,E),最好我需要制定一个适用于有向图和无向图的解决方案。
V的一个子集是W,这些是特殊的节点。 我需要找出是否有可能找到一条从起始节点 s 到结束节点 t 的路径,该路径经过 W 中的一个或多个特殊节点。这是一个节点不重复的简单路径,并且它在多项式时间内必须 运行
所以我只需要输出'true'或'false'。
我目前的尝试
首先,我认为对于每个特殊节点 i W,我会 运行 一个可以找到节点 w 的 bfs,然后 运行 从节点 w 到 t 的新 bfs。 大致是这样的:
for w in W:
firstpath = bfs from s to w
secondPath = bfs from w to t (that does not touch nodes in firstpath)
if firstpath + second == path from s to t:
return True
else:
continue
但在这里,问题可能是“firstpath”可能会阻塞从 w 到 t 的可能路径。
任何可以保证没有“节点冲突”的问题的多项式算法的想法
对于无向图,我们可以尝试 W 中的所有 w,使用最大流寻找从 w 到 s 和 t 的两条 node-disjoint 路径。不幸的是,我不确定这是否可以推广到有向图。