我试图在图形的上下文中理解深度优先和广度优先遍历。我见过的大多数视觉例子都使用树来说明两者之间的差异。树中节点的排序比图中的节点要简单得多(至少对我而言),并且完全可以理解节点将从根节点从上到下,从左到右排序。
在处理图表时,我看不到这种自然顺序。我已经看到了一个标有A到F的各种节点的例子,其中作者解释了节点的遍历,假设它们的标签有词汇顺序。这似乎意味着节点所代表的值的类型必须具有内在的可比性。是这样的吗?任何澄清都将非常感谢!
答案 0 :(得分:2)
图表中的节点值无法进行比较。
考虑BFS与DFS的直观/过度简化的方法是:
在DFS中,你选择一个移动的方向,然后你尽可能地向那个方向走,直到你走到死路。然后你尽可能少地回溯,直到找到你可以进入的不同方向。跟着它到达终点,然后再回溯,依此类推。
在BFS中,您可以按顺序在每个可能的方向上执行一步。然后在每个可能的方向上采取两个步骤,依此类推。
考虑下面的简单图表(我故意选择不是A,B,C的标签......以避免标签的排序很重要):
Q --> X --> T
| |
| |
v v
K --> W
从Q开始的DFS可能会像这样继续:Q到X到W(死角),回溯到X,转到T(死角),回溯到X然后回到Q,转到K(死胡同以来W已被访问过。)
从Q开始的BFS可以这样进行:Q,然后是X(距离Q一步),然后是K(距离Q一步),然后是W(距离Q两步),然后是T(两步)远离Q)。