是否有一条从s-t穿过特殊节点的路径?

问题描述

我已经看到此网站描述了此问题的一些变体,但并非完全如此。

问题

我有一个未加权的图G =(V,E),最好我需要制定一种适用于有向图和无向图解决方案。

V的子集是W,它们是特殊的节点。 我需要找出是否有可能找到从起始节点s到结束节点t的路径,该路径经过W中的一个或多个特殊节点。这是一条简单的路径,其中节点不重复,并且它必须在多项式时间内运行

所以我只需要输出'true'或'false'。

我到目前为止的尝试

首先,我认为对于每个特殊节点i W,我都会运行一个bfs,可以找到该节点w,然后从节点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的两个节点不相交的路径。不幸的是,我不确定这是否可以推广到有向图。