我有一个有向图(更具体地说是控制流程图),每个顶点都有一组属性。
我想要找到(或编写)一个算法,给定一个带有属性P
的顶点V
,可以找到到某个顶点E
的最长路径,使得从V
到E
的所有可能路径上的所有顶点都包含属性P
。
示例1
假设我有以下图形。(请原谅糟糕的ASCII图。)
+----+
+--------+P +--------+
| +----+ |
| V1 |
| |
| |
+--v--+ |
+----+P ++ |
| +-----++ +--v--+
| | +----+P |
| | | +-----+
+--v--+ +--v--+ |
|P +-+ +-+P | |
+-----+ | | +-----+ |
| | |
| | |
+v-v--+ |
V6 |P +---------+ |
+-----+ | |
| |
| |
| |
| |
+-v--v-+
V7 |P |
+---+--+
|
|
+---v--+
V8 |!P |
+------+
从
V1
开始,所有可能路径上P
一直成立的最长路径是V1
-> V7
。请注意,其他路径,如V1
-> V6
,虽然P
总是成立的,但V1
-> V7
是最长的。
示例2
这个例子与上面相同,只是现在V3
中P
不成立:
+----+
+--------+P +--------+
| +----+ |
| V1 |
| |
| |
+--v--+ |
+----+P ++ |
| +-----++ +--v--+
| | +----+!P | V3
| | | +-----+
+--v--+ +--v--+ |
|P +-+ +-+P | |
+-----+ | | +-----+ |
| | |
| | |
+v-v--+ |
V6 |P +---------+ |
+-----+ | |
| |
| |
| |
| |
+-v--v-+
V7 |P |
+---+--+
|
|
+---v--+
V8 |!P |
+------+
在这种情况下,从
V1
开始,在所有可能的路径中,P
始终保持的最长路径是V1
-> V6
。路径V1
-> V7
无效,因为在V1
和V7
之间存在一条路径,其中P
不成立。
关于我的情况的进一步说明
- 图可以是循环的。
- 图将是“小到中等”的大小,可能有1000个或更少的顶点。
- 图不一定总是有一个根和一个叶子,就像上面的例子一样。
问题
是否有一种标准算法来计算这样的路径?
S
到某个顶点E
的最长路径,使得P
在连接S
和E
之间的 所有 路径上的 所有 顶点上都成立吗?这似乎是一个非常严格的限制... - Vincent van der Weelep
,并找到最长路径)。由于哈密顿路径是 NP-完全问题,所以这个问题也是 NP-完全问题,并且目前没有已知的多项式解决方案。 - amit