迭代加深DFS以找到简单路径

时间:2016-03-11 10:29:03

标签: algorithm search graph

大家好!

我想使用Iterative深化DFS来查找图中两点之间的所有简单路径。 我阅读了算法,并了解它为什么有利于搜索。 但有一件事我需要弄清楚,似乎这个算法不太适合找到两点之间的所有简单路径。 由于路径较短,而路径较长。那么如何决定何时停止?

我正在考虑这些事情,正在运行一个程序。 该计划就像那样

IDDFS(target, source)
{
   int depth=1;
   bool m_bool=FALSE;

   while(!m_bool)
   { 
      depth++;
      m_bool=dfs(target,source,allpaths,depth);
      /*
      dfs is recursive, and when return true, that means find a simple 
      path
      */
   }
}

现在,这个程序有问题,我正在尝试解决它。 同时,我想就此提出建议。 迭代加深DFS可用于在大型图形上找到速度相对较快的简单路径吗? 如果是,请分享您的经验。 如果没有,那么请建议我最好的算法是什么?

提前致谢!

1 个答案:

答案 0 :(得分:1)

没有。如果您正在寻找所有简单路径,那么迭代加深DFS没有意义。只是做一个常规的DFS,因为你不关心路径长度。

常规DFS应注意不要进入循环,这意味着它应该避免已经在潜在路径上的节点,因此找到的所有路径都是简单路径。如果您的实现没有这样做,请添加bool向量,在将其添加到该路径时将相应值设置为true,并在从递归返回时将其设置为false,并避免将值已设置为true的节点。 / p>

大型图表上的所有路径都会变慢。在完全连接的图上,路径数是~N! (如果我没有误会)。由于这是解决方案的大小,你将无法做得更好。 DFS是一个不错的解决方案。它可以被优化,但它不会是polinomial。如果您需要针对实际问题解决它,请尝试利用您正在使用它的图形的某些特性(例如节点之间的低连接性,或无法连接到目标或源的大区域)。