【问题标题】:Non-recursive DFS vs BFS, only differ in stack vs queue?非递归 DFS 与 BFS,仅在堆栈与队列方面有所不同?
【发布时间】:2015-05-06 21:21:58
【问题描述】:

我正在查看一般图表的non-recursive DFSBFS。除了前者使用堆栈而不是队列这一事实之外,唯一的区别是它“延迟检查是否已发现顶点,直到顶点从堆栈中弹出,而不是在推送顶点之前进行检查”。为什么这个“访问”检查顺序不同?或者换一种说法,我们可以通过简单地将BFS中的队列替换为堆栈来将BFS更改为非递归DFS吗?

我检查了我能找到的所有帖子,例如 thisthis,但没有一个可以澄清这个问题。

【问题讨论】:

    标签: depth-first-search breadth-first-search non-recursive


    【解决方案1】:

    是的,这是唯一的区别。

    您从维基百科显示的 DFS 算法有一个错误(嗯,至少是严重的低效率)——它会重新插入到已经访问过的 S 节点中。 BFS 的设计更加合理,您可以将其更改为具有堆栈。

    【讨论】:

    • 仔细检查一下。所以如果我用堆栈替换 BFS 中的队列,我有一个非递归的 DFS?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 2011-04-19
    相关资源
    最近更新 更多