37得票13回答
如何使用非递归方法实现图的深度优先搜索

我花费了很多时间在这个问题上。然而,我只能找到非递归方法处理树的解决方案:树的非递归方式,或者递归方法来处理图:图的递归方式。 而许多教程(我不提供链接)也没有提供相应的方法,或者教程完全是错误的。请帮帮我。 更新: 很难描述: 如果我有一个无向图: 1 / | \ 4 | 2 ...

34得票4回答
寻找图的割点或关节点算法的解释

我在网上搜索了DFS算法查找图的所有关节点的解释,但没有找到任何内容。甚至没有维基页面。 从阅读相关资料中,我了解到了基本信息。PDF 每个节点都有一个变量,实际上是查找反向边并找到最接近根节点的最高节点。在处理完所有边之后,它将被找到。 但是我不明白如何在执行DFS期间找到每个节点的这...

31得票8回答
最短路径:DFS、BFS还是两者都用?

我知道在无权图中,BFS单独可以找到最短路径。但是我也在一些网站上读到了一些人声称BFS或DFS都可以做到这一点。我只是想确认这可能是错误的,并且只有BFS可以做到这一点(即使我在快速搜索后仍然不太自信)。如果我错了,请有人解释一下DFS如何能给出最短路径。

31得票2回答
BFS和DFS在二叉树上的运行时间是O(N)吗?

我了解BFS和DFS在一般图上的运行时间复杂度为O(n+m),其中n是节点数量,m是边数量,这是因为对于每个节点都必须考虑其邻接列表。然而,当BFS和DFS在二叉树上执行时,它们的运行时间复杂度是多少呢?我认为它应该是O(n),因为一个节点可能的边数是常数(即2)。请确认这是否是正确的理解。如...

30得票5回答
Python中拓扑排序的实现看起来简单,但实际上需要一定技巧。

从这里提取出来的是一个最小化的迭代深度优先搜索程序,我称之为最小化是因为你几乎无法进一步简化代码: def iterative_dfs(graph, start, path=[]): q = [start] while q: v = q.pop(0) ...

30得票5回答
广度优先搜索和迭代加深算法的区别

我理解BFS和DFS,但我真的无法弄清楚迭代加深搜索和BFS之间的区别。显然,迭代加深搜索的内存使用量与DFS相同,但我无法看出这是如何可能的,因为它就像BFS一样不断扩展。 如果有人能澄清一下那就太棒了。 A / \ B C / / \ D E F

26得票10回答
什么是广度优先搜索,它有什么用途?

通常在我需要遍历图时,我总是使用深度优先搜索,因为它的空间复杂度更低。尽管我的经验相对有限,但我还真没有遇到过使用广度优先搜索的情况。 什么情况下使用广度优先搜索才有意义呢? 更新:我想这里回答展示了我使用BFS的情况(因为当时我认为应该使用DFS)。尽管如此,我仍然很想知道,在这种情况下...

26得票3回答
深度优先搜索为什么被认为是空间高效的?

我正在学习一个算法课程,在课程中提到,深度优先搜索(DFS)比广度优先搜索(BFS)更加节省空间。 为什么会这样呢? 尽管它们基本上在做同一件事情,但是在DFS中,我们将当前节点的后继节点放入堆栈中,而在BFS中,我们将后继节点入队。

26得票9回答
使用DFS进行无递归的拓扑排序

我知道常见的拓扑排序方法是使用DFS和递归。但是如果使用stack<int>而不是递归,你该如何做呢?我需要获取反向后序,但现在有些困惑: 图是一个vector<vector<int>>邻接表 以下是我想用于拓扑排序的DFS:bool visited[M...

26得票2回答
深度优先搜索和广度优先搜索的理解

我正在制作俄罗斯方块作为一个有趣的副业项目(不是作业),并希望实现 AI,让电脑自己玩。我听说可以使用 BFS 搜索可用位置,然后创建最合理下落位置的聚合分数来完成。但我对 BFS 和 DFS 算法有些困惑。我最好的学习方式是画出来...我的绘图正确吗? 谢谢!