12得票8回答
非递归深度优先搜索(DFS)使用栈

好的,这是我在Stack Overflow上的第一篇帖子,我已经阅读了一段时间并且非常欣赏这个网站。我希望这是一个可以问的问题。所以我一直在仔细研究《算法导论》(Cormen. MIT出版社)中列出的形式化算法,现在我正在学习图算法。我一直在非常详细地研究广度优先搜索和深度优先搜索的正式算法。...

12得票2回答
BFS和DFS算法在什么情况下比A*搜索算法更有效?

我已经测试了A*搜索算法与广度优先搜索(BFS)和深度优先搜索(DFS),发现A*搜索算法扩展更少的节点。 我理解A*使用启发式和边缘成本函数扩展已经更便宜的路径。 在哪些情况下,相较于A*搜索算法,BFS和DFS会更加高效呢?

12得票1回答
拓扑排序以找到到t的路径数量

我需要开发一个与拓扑排序相关的O(|V|+|E|)算法,在有向无环图(DAG)中确定每个顶点到t(t是出度为0的节点)的路径数。我已经开发了一种DFS的修改如下: DFS(G,t): for each vertex u ∈ V do color(u) = WHITE ...

12得票5回答
随机优先搜索?

遍历图的最常见方法是广度优先搜索和深度优先搜索。这两种搜索算法都遵循一个通用模板: 创建一个工作列表W,以起始节点s为种子。 当工作列表不为空时: 删除工作列表的第一个元素;将其称为v。 如果v未被访问: 标记v已访问。 对于每个直接连接到v的节点u,将u添加到W中。 在广...

12得票2回答
生成树与生成森林的区别

概念上,图中的生成树 (Spanning Tree)和生成森林 (Spanning Forest)有何不同? 此外,是否可以通过深度优先搜索 (DFS)或广度优先搜索 (BFS)遍历来构建生成森林?为什么?怎样实现? 我了解生成树,但是我找不到任何关于生成森林的清晰解释。即使是维基百科(h...

12得票1回答
BFS和DFS的目的是什么?

我学会了这些算法的工作原理,但它们用于什么呢? 我们使用它们来: 在图中找到特定节点或 查找最短路径或 在图中找到循环 吗? 它们都只是访问所有节点并标记它们已被访问,我不明白这样做的意义所在。 我有点迷失在我正在学习的东西中。

12得票1回答
DFS比BFS快的意义是什么?

在阅读有关深度优先搜索(DFS)与广度优先搜索(BFS)的内容时,我看到一个说法,即DFS比BFS更快,并且需要更少的内存。 我的实现是使用C++编写的,其中DFS使用堆栈,BFS使用队列。请问有人能够解释一下速度和内存要求的不同之处以及如何实现吗?

10得票3回答
枚举所有可能路径的算法

考虑以下图表: 我正在尝试找到一种方法来枚举从源节点到目标节点的所有可能路径。例如,从A到E,我们有以下可能的路径: A B C D E A B C E A C D E A C E 请注意,对于A C D E,实际上有两条路径,因为其中一条路径使用边缘F3,另一条路径使用边缘F5。...

10得票2回答
如何输出无向图的所有双连通分量?

给定一个一般的无向图,如何在 O(N+M) 的时间内打印出图的所有双连通分量?我知道 Tarjan 算法可用于输出无向图的所有关节点,但我很难将该算法扩展到打印双连通分量。我尝试了搜索谷歌,但所有的结果都没有通过我的测试用例,因为它们忽略了算法的边界情况。 请问有人能够提供这个问题的可行代码...

10得票4回答
使用深度优先搜索遍历任务子树的内核模块。

我知道如何创建内核并通过简单包含linux/sched.h并使用以下代码线性迭代进程:struct task_struct *task; for_each_process(task) { printk("Name: %s PID: [%d]\n", task-&gt...