【发布时间】:2014-03-11 15:24:46
【问题描述】:
根据维基百科,DFS和BFS的实现基本上有两个区别。
他们是:
1)DFS使用堆栈,而BFS使用队列。(这个我理解)。
2) DFS 延迟检查是否已发现顶点,直到顶点从堆栈中弹出,而不是在推送顶点之前进行此检查。
我无法理解第二个区别。我的意思是为什么 DFS 在从堆栈中删除后访问节点,而 BFS 在将节点添加到队列之前访问节点。
谢谢!
额外信息:
在上述两种算法的简单实现中,我们采用一个布尔数组(我们将其命名为visited)来跟踪哪个节点被访问或未访问。问题中提到了这个visited boolean 数组。
【问题讨论】:
-
你在维基百科的什么地方读到的? DFS 和 BFS 是根本不同的算法,不能用仅仅两分钟的细节来描述。之前已经在这里讨论过很多次了。这是一个例子stackoverflow.com/questions/20429310/… 同样,DFS 和 BFS 是两种完全不同的算法。在 BFS 中用 LIFO 替换 FIFO 将产生一个正确再现 DFS 发现序列的算法,但它仍然不是真正的 DFS 算法。
-
非递归实现是假的。它不是 DFS。这是维基百科文章中的一个重大错误。我在上面的链接中将非递归实现描述为“伪 DFS”。
-
AnT,你能帮我解决这个问题吗? stackoverflow.com/questions/70835523/…