甚至长度路径算法-DFS

时间:2012-04-08 12:32:03

标签: algorithm data-structures graph

首先,我不会撒谎。这是我的功课。我要花太多时间来解决这个问题,我不知道。

我需要编写算法(高效),找到从给定顶点到所有其他顶点的偶数长度路径的所有顶点。

我知道它可能是DFS使用的东西......

请给我一些指导!

3 个答案:

答案 0 :(得分:4)

由于这是家庭作业,我只提供一些提示:

  1. 如果您在不保持visited设置的情况下执行DFS达到某个深度 - 您“发现”的所有顶点都有来自源的路径,长度等于当前深度。
  2. 如果您执行深度为2|V|的DFS,则会在某个甚至深度级别中发现具有来自源的偶数路径的所有顶点。 [说服自己为什么:奇数周期会发生什么?偶数长度周期会发生什么?]
  3. 注意:运行时间是顶点数量的指数[doubled]。

答案 1 :(得分:1)

对于每个节点i,创建3个布尔状态
(I,0):未得
(i,1):可以通过奇数长度达到 (i,2):可以达到均匀长度
最初他们都是零 那么,你做dfs,可以在dfs中改变你访问的节点的状态
如果您发现不会更改节点的状态,请停止此线程 因为你可以改变3 * n个状态,所以你需要的最长时间是 O(m)with是边数〜

答案 2 :(得分:0)

你关心的是运行时间吗?已经讨论过了吗?您是否谈到过集合的高效数据结构?如果不是,那么amit的提示可以帮助你。

如果是,那么你应该更聪明。当你讨论DFS时,你谈过维护一组先前访问过的顶点,是吗?

您可以改为维护多个集合,每个集合意味着略有不同。您可能会设想您的访问集是这些单独集合的并集,但关键是您可能需要重新访问顶点(如果它出现在一个顶点中,然后再出现在另一个顶点中)。

问问自己:我可以将顶点放入哪些集合?如果一个顶点已经通过访问加入了某些集合,那么我何时需要重新访问它?小心,你可以在这里轻易搞错。