当前位置: 首页 > 知识库问答 >
问题:

何时将节点添加到bfs或dfs中访问的节点?

易祖鹤
2023-03-14

嘿,我一直在研究BFS/DFS,我注意到它们中的许多都有一个轻微的修改,即当一个节点添加到访问集时。

在某种程度上,算法将从堆栈/队列中弹出节点,然后将其添加到访问集。然后它会添加所有没有被访问过的邻居

在另一个实现中,节点不会添加到访问集。相反,它会将所有未访问的邻居添加到堆栈/队列中,但会在将这些邻居添加到堆栈/队列时将其添加到已访问集中。

总之,在一种方法中,当它们弹出到堆栈/队列时,它们被添加到访问集。在另一种方法中,当它们被添加到堆栈/队列时,它们被添加到访问集。

我的两个问题是:两者的区别是什么?我应该用哪一个?

我可以看到一些问题发生,如果我只把它添加到访问的时候,它是弹出的,并且在图中有周期,但我也不是100%确定。任何帮助将不胜感激。

共有1个答案

巫马翰翮
2023-03-14

两者都具有相同的算法复杂性和正确性。

但是,标记仅在开始遍历相邻顶点之前访问的顶点稍微慢一点。对于BFS,这意味着将相同的顶点多次冗余地添加到队列中。对于DFS,这意味着在同一个顶点上多次冗余调用DFS函数。

因此,我个人总是喜欢在将顶点添加到堆栈/队列之前将其标记为访问过的顶点。

 类似资料:
  • 我需要一个非常简单的例子,说明如何使用Neo4JClient将节点添加到索引中 在下面的C代码中,我创建了一个索引和一个员工节点。 问题: 在下面的代码中,如何将创建的节点添加到索引中?解决方案应允许搜索员工ID或姓名。

  • 因此,我有一个从扩展而来的常规组件,我想将其添加到一些FXML代码中。我得到extends: 我试图把它包括成这样: FXML代码和类位于同一个包/目录中。 我可以像这样包括FXML文件,但我想包括一个类文件:

  • 我的Firebase数据库映像在Firebase的实时数据库中,我正在尝试访问父节点的名称,并给出了子节点的名称。但是,.parent似乎需要对子节点的引用,如果没有父节点的名称,我似乎无法获得子节点的引用。 这是我的数据的代码: 问题出在like函数中:如果我能找到一种方法来获取发tweet(参数t表示的tweet)的人的userId,那么第一个var y和所有这些都是不必要的。 如果我可以得到

  • 我有一个场景 我想从一个特定的节点(比如ID:7)开始运行BFS 如果有无法从该节点访问的节点,我想重新启动BFS(使用任何剩余节点),直到访问图的所有顶点 到目前为止,我得到的是从节点0开始并用另一个未访问的顶点重新启动的代码(部分): 如何有效地更改此代码以满足我的要求?

  • 问题内容: 这是我所拥有的: 如何编写代码以在列表末尾添加节点? 所以如果我有 我怎么去 其实…我什至不确定是否要添加到最后。我认为添加然后排序是有效的吗?不确定。 谢谢! 问题答案:

  • 我添加一个子节点到树视图中的当前父节点。但我的问题是,它将新节点添加到当前父节点的末尾,而不是添加在为true)的位置。 这是我的代码: 当然,、、和都是我的代码中的变量,对于任何for循环,它们都是不同的整数和字符串是树视图节点的名称,是固定字符串循环查找整个树,如果有与给定字符串相等的节点,则保留该节点,否则在树中插入一个空节点,然后递归执行。但为了简单起见,让我们: