深度优先搜索中的堆栈溢出

时间:2017-01-16 12:21:53

标签: c++ stack-overflow depth-first-search connected-components

我正在编写一个DFS连接组件标签,基本思路非常简单,只是递归地将DFS应用于四个邻居(左,右,上,下)。

问题是,当连接区域太大(例如100 * 100像素)时,会出现运行时错误,

applicationId "com.yourcustomname.yourcustomname.applicationname"

我认为这是因为它太深了。对此有任何优化或解决方案吗?

以下是代码:

0xC00000FD: Stack overflow (:  0x00000001, 0x001D2EB4)

在具有8G RAM的笔记本电脑上运行,没有过流的最大区域是72 * 72,接近5000级递归。如何使用DFS做得更好?

1 个答案:

答案 0 :(得分:1)

用循环替换递归并使用显式堆栈(任何列表都可以)。

堆栈将模拟调用堆栈,但不会那么紧密。

参见Wikipedia的迭代实现:

iterativeInorder(node)
  s ← empty stack
  while (not s.isEmpty() or node ≠ null)
    if (node ≠ null)
      s.push(node)
      node ← node.left
    else
      node ← s.pop()
      visit(node)
      node ← node.right