【发布时间】:2013-10-13 04:27:32
【问题描述】:
我将给出这个问题的一般情况,因为这是我第二次看到可以简化为这种情况的东西,而且我找不到比检查每条路径更好的东西了。
假设我们有一个顶点为 V 的有向图 G,使得没有环和自边。此外,每个顶点都有一种颜色。找到从给定顶点开始的最长路径,使得该路径最多经过每种颜色的 1 个顶点。
我已经通过在递归步骤中删除添加的顶点颜色的所有顶点来实现本质上是深度优先搜索,我想知道是否有更好的方法来做到这一点。我一直遇到的问题是,由于颜色限制,存储过去的结果很困难,所以像 Dijkstra 的最短路径算法不能给出正确的结果。
【问题讨论】:
-
我可以提出
O(n*2^k)算法,其中n = max { |E|, |V|}和k = #colors。请注意,这个问题与最短路径有很大不同,因为在这里您谈论的是最长路径(通常是 NP-Hard 问题,但图是 DAG,因此可能有有效的解决方案)。 -
回溯 (DFS) 听起来不错。不需要存储过去的状态,只需存储当前分支访问的颜色。回溯需要颜色和顶点排序,以了解当前顶点的访问顺序。当当前分支有颜色长度时找到解决方案。
标签: algorithm graph graph-theory