Search DFS是否应该检查子项的目标状态?

Search DFS是否应该检查子项的目标状态?,search,artificial-intelligence,depth-first-search,Search,Artificial Intelligence,Depth First Search,DFS(深度优先搜索)是否应该在移动到下一个节点之前检查给定节点的所有子节点的目标状态?是(当然,除非DFS在子节点中停止)。 演示: 我也不确定我是否理解你的问题,但是: 在DFS中,当您处于节点时,您将执行目标测试。如果不在目标位置,则移动到最左边的子对象,测试它,等等。让我们假设最左边的子对象不是目标,而是一片叶子。然后移回其父节点并移到第二个最左边的节点,检查它,等等。然后移回第三个最左边的子节点,等等 如果你问的是“检查所有的孩子,然后移到最左边的孩子”之类的话,你不会这样做

DFS(深度优先搜索)是否应该在移动到下一个节点之前检查给定节点的所有子节点的目标状态?

是(当然,除非DFS在子节点中停止)。 演示:


我也不确定我是否理解你的问题,但是:

在DFS中,当您处于节点时,您将执行目标测试。如果不在目标位置,则移动到最左边的子对象,测试它,等等。让我们假设最左边的子对象不是目标,而是一片叶子。然后移回其父节点并移到第二个最左边的节点,检查它,等等。然后移回第三个最左边的子节点,等等

如果你问的是“检查所有的孩子,然后移到最左边的孩子”之类的话,你不会这样做


在上面的动画中,当每个节点点亮时,您将看到简短的小问号。我相信这些都是为了传达目标测试

深度优先搜索的确切含义是:首先运行最左边的子节点。只有当一个节点没有子节点时,您才能解除呼叫并尝试更高级别的另一个子节点。可以看到这是动画,根的左节点没有首先检查所有子节点

您可以先检查所有子项:这称为广度优先搜索。在提供的动画Franck的情况下,这将导致测试根的两个子节点,然后下降到最左边的子节点并检查这两个节点,以此类推

请记住,在到达树中的节点之后,但在展开子节点之前,会对节点进行目标状态测试。(毕竟,如果我们找到了目标,我们就完成了)


注意,如果您正在寻找最便宜(最小深度)的目标路径(假设有多条这样的路径可用),那么广度优先可能就是您要寻找的目标路径。

我想您误解了我的问题-在移动到下一个节点之前,图形没有检查每个节点的子节点的目标状态。它似乎沿着最左边的路径向下移动,直到终止,然后回溯到下一条最左边的路径。这就是DFS的工作原理-我只是想知道DFS是否应该在移动到最左边的未访问路径之前检查任何给定节点的所有子节点中的目标状态。