我正在编写一个DFS连接组件标签,基本思路非常简单,只是递归地将DFS应用于四个邻居(左,右,上,下)。
问题是,当连接区域太大(例如100 * 100像素)时,会出现运行时错误,
applicationId "com.yourcustomname.yourcustomname.applicationname"
我认为这是因为它太深了。对此有任何优化或解决方案吗?
以下是代码:
0xC00000FD: Stack overflow (: 0x00000001, 0x001D2EB4)
在具有8G RAM的笔记本电脑上运行,没有过流的最大区域是72 * 72,接近5000级递归。如何使用DFS做得更好?
答案 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