在深度优先遍历中如何使用回溯? [复制]

Posted

技术标签:

【中文标题】在深度优先遍历中如何使用回溯? [复制]【英文标题】:How is backtracking used in a depth-first traversal? [duplicate] 【发布时间】:2020-01-22 17:54:10 【问题描述】:

谁能简单地告诉我,在深度优先遍历中如何使用回溯?我很难理解,所以我可以举个例子。

谢谢。

【问题讨论】:

这能回答你的问题吗? What's the difference between backtracking and depth first search? 【参考方案1】:

每次遇到“死胡同”时,都会在深度优先遍历中使用回溯。它确保最终探索每条路径。例如,假设给定 this 图形,您从 A 开始进行深度优先遍历。(我们将使用左孩子先走的约定。)

1. A -> B(picture中的蓝色)

B有一个孩子!很好,我们会去那里。

2。 B -> D(picture 中的绿色)

D 有 2 个孩子!很好,我们先向左走。

3。 D -> E(picture 中的紫色)

呃哦,E没有孩子!这是一个死胡同。这意味着我们需要回溯一个级别(返回“向上”到 D),看看我们是否有其他可以搜索的路径。

是的——D 有另一个未开发的孩子。让我们去那里。

4. D -> F(picture中的粉红色)

F 没有孩子!这是另一个死胡同,让我们回溯一个级别(“向上”到 D),看看我们是否还有其他搜索路径。

没有——D 没有孩子了。让我们回溯另一个级别(“向上”到 B)。

没有——B 没有孩子了。让我们回溯另一个层次。

是的 - A 有另一个未探索的孩子!让我们去那里。

5. A -> C(picture 中的黄色)

C 没有孩子。让我们回溯另一个层次。

不——A 没有孩子可以探索,它是根。这意味着我们的遍历完成了! :)

【讨论】:

以上是关于在深度优先遍历中如何使用回溯? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

广度优先遍历和深度优先遍历的真正区别

一对好基友,深度优先vs.广度优先搜索

介绍下深度优先遍历和广度优先遍历,如何实现?

深度优先遍历怎么修改为广度优先遍历

回溯法与深度优先搜索

BAT手撕算法题·深度优先遍历