首先,我不会撒谎。这是我的功课。我要花太多时间来解决这个问题,我不知道。
我需要编写算法(高效),找到从给定顶点到所有其他顶点的偶数长度路径的所有顶点。
我知道它可能是DFS使用的东西......
请给我一些指导!
答案 0 :(得分:4)
由于这是家庭作业,我只提供一些提示:
visited
设置的情况下执行DFS达到某个深度 - 您“发现”的所有顶点都有来自源的路径,长度等于当前深度。2|V|
的DFS,则会在某个甚至深度级别中发现具有来自源的偶数路径的所有顶点。 [说服自己为什么:奇数周期会发生什么?偶数长度周期会发生什么?] 注意:运行时间是顶点数量的指数[doubled]。
答案 1 :(得分:1)
对于每个节点i,创建3个布尔状态
(I,0):未得
(i,1):可以通过奇数长度达到
(i,2):可以达到均匀长度
最初他们都是零
那么,你做dfs,可以在dfs中改变你访问的节点的状态
如果您发现不会更改节点的状态,请停止此线程
因为你可以改变3 * n个状态,所以你需要的最长时间是
O(m)with是边数〜
答案 2 :(得分:0)
如果是,那么你应该更聪明。当你讨论DFS时,你谈过维护一组先前访问过的顶点,是吗?
您可以改为维护多个集合,每个集合意味着略有不同。您可能会设想您的访问集是这些单独集合的并集,但关键是您可能需要重新访问顶点(如果它出现在一个顶点中,然后再出现在另一个顶点中)。
问问自己:我可以将顶点放入哪些集合?如果一个顶点已经通过访问加入了某些集合,那么我何时需要重新访问它?小心,你可以在这里轻易搞错。