breadth-first-search相关内容

BFS、迭代DFS和递归DFS:何时将节点标记为已访问

在谷歌上搜索了许多小时后,我仍然没有找到关于这个问题的深入、直观和可靠的解决方案。我找到的最接近的文章,链接到某个不知名的论坛上,是这样的:https://11011110.github.io/blog/2013/12/17/stack-based-graph-traversal.html。我也看到了这个堆栈溢出问题DFS vs BFS .2 differences,但回应没有达成明确的共识。 ..

使用邻接表对图中所有路径进行 BFS 遍历

我目前正在尝试在使用邻接矩阵的图中遍历从源到目的地的所有路径.我一直在尝试以 BFS 方式进行操作.感谢您的帮助.我只有一条路.我如何才能打印其他路径? 公共类 AllPossiblePaths {静态int v;静态数组列表adj[];公共 AllPossiblePaths(int v) {这个.v = v;adj = 新的 ArrayList[v];for (int i = 0; i ..

使用 map reduce 遍历带有 bfs 的图的有效方法是什么?

这是一个招聘人员问我的面试问题,问题基本上是计算所有节点到每个节点的最短路径,我的解决方案如下 启动所有可能的边(没有反向 A - B 与 B-A 相同) 每个节点将在下面表示 (src, cost, current_list, dest) ,src 和 dest 基本上是我们之前启动的所有可能的边 地图: 对于你遍历的每条边,你复制你的元组并添加当前遍历节点到成本和当前列表. ..

Prolog 中的广度优先搜索

我是 Prolog 的新手,目前正在实施 DFS(深度优先搜索)和 BFS(广度优先搜索)算法.我的 DFS 像下面的代码一样工作正常,但是 BFS 在到达叶节点时终止并中止(它不会回溯并继续搜索).我也看了一些关于这个的示例代码,但是有一些函数没有定义,比如 s(Node, NewNode)...所以很难理解,或者版本使用队列太复杂. 这是我的代码:一些地面功能: %connected( ..
发布时间:2022-01-12 10:26:46 其他开发

在无向无权图中查找给定长度的路径数

路径的“长度"是路径中的边数. 给定一个源顶点和一个目标顶点,我想找到路径数从源顶点到目标顶点给定长度 k. 我们可以随意访问每个顶点,所以如果从 a 到 b 的路径是这样的:a ->c->b->c->b 它被认为是有效的.这意味着可以有循环,我们可以多次经过目的地. 两个顶点可以通过多条边连接.因此,如果顶点 a 和顶点 b 由两条边连接,那么路径 , a ->;b 通过边缘 ..

解释 Haskell 广度优先编号代码以遍历树

我正在阅读 克里斯的这篇论文冈崎;标题为“广度优先编号:算法设计小练习的经验教训". 一个问题是 - 算法中的魔法是如何发生的?有一些数字(例如,标题为“将一个级别的输出线程化到下一个级别的输入"的图 7)不幸的是,也许只有我,但那个数字已经完全让我感到困惑.我根本不明白线程是如何发生的? 解决方案 广度优先遍历意味着逐层遍历树.所以让我们假设我们已经知道每个级别开始时的数字是多少 ..

为什么用 DFS 而不是 BFS 在图中寻找循环

主要使用 DFS 来查找图中的循环,而不是 BFS.有什么原因吗?两者都可以找到一个节点是否已经在遍历树/图时访问过. 解决方案 深度优先搜索比广度优先搜索的内存效率更高,因为您可以更快地回溯.如果使用调用堆栈也更容易实现,但这依赖于不溢出堆栈的最长路径. 此外,如果您的图表是定向,那么您不仅要记住您是否访问过节点与否,还有你是如何到达那里的.否则,您可能认为您找到了一个循环,但实际 ..

并行化广度优先搜索

我只是自学了一些 OpenMP,这可能很愚蠢.基本上,我试图在 C++ 中并行化广度优先搜索程序,每个节点都需要很长时间来处理.这是一个示例代码: queueq;q.push(头);而 (!q.empty()) {qSize = q.size();for (int i = 0; i 处理函数 doStuff() 非常昂贵,我想对其进行并行化.但是,如果我通过将 #pragma omp par ..
发布时间:2021-12-30 21:23:59 C/C++开发

如何在boost中遍历图使用BFS

我在编译一个非常简单的图形的 BFS 时遇到问题.无论我做什么,我都会收到有关不匹配方法调用的各种编译器消息(我尝试过 boost::visitor 并扩展 boost::default_bfs_visitor 等) #include #include #include #include #include int main() {typedef boost::adjacency_list图_t; ..
发布时间:2021-12-24 15:25:36 C/C++开发

为什么 BFS/DFS 的时间复杂度不是 O(E) 而不是 O(E+V)?

我知道在堆栈溢出中有一个类似的问题,有人问过,为什么 BFS/DFS 的时间复杂度不是简单的 O(V). 给出的适当答案是,在完整图的情况下,E 可以与 V^2 一样大,因此在时间复杂度中包含 E 是有效的. 但是,如果 V 不能大于 E+1.那么,在这种情况下,时间复杂度中没有 V,应该可行吗? 解决方案 如果给定 E = kV + c,对于一些实常数 k 和 >c 那么, ..

在无向未加权图中查找给定长度的路径数

路径的“长度"是路径中的边数. 给定一个源顶点和一个目标顶点,我想找到从源顶点到给定长度 k的目标顶点的路径数. 我们可以根据需要多次访问每个顶点,所以如果从 a 到 b 的路径是这样的: a ->c ->b->c ->b 它被认为是有效的.这意味着可以有循环,我们可以不止一次地通过目的地. 两个顶点可以通过多条边连接.因此,如果顶点 a 和顶点 b 由两条边连接,则路径 a - ..

在大图中有效地找到最短路径

我正在寻找一种方法来实时找到巨大图中节点之间的最短路径.它有数十万个顶点和数百万条边.我知道以前有人问过这个问题,我想答案是使用广度优先搜索,但我更想知道您可以使用什么软件来实现它.例如,如果它已经存在一个用于在无向图中执行 bfs 的库(带有 python 绑定!),那将是完全完美的. 解决方案 python-graph 添加: 评论让我很好奇pygraph的性能对于OP的顺 ..
发布时间:2021-12-24 14:32:43 Python

未加权图的最短路径(最少节点)

我正在尝试构建一种方法,该方法返回未加权图中从一个节点到另一个节点的最短路径.我考虑过使用 Dijkstra 的,但这似乎有点矫枉过正,因为我只想要一对.相反,我实施了广度优先搜索,但问题是我的返回列表包含一些我不想要的节点 - 我该如何修改代码以实现我的目标? 公共列表getDirections(节点开始,节点完成){列表方向 = new LinkedList();队列q = new Link ..
发布时间:2021-12-24 14:24:37 Java开发

寻找最短路径时,BFS 和 Dijkstra 算法之间有什么区别?

我正在阅读有关图算法的文章,我遇到了这两种算法: Dijkstra 算法 广度优先搜索 Dijkstra 算法和 BFS 在寻找节点之间的最短路径时有什么区别? 我搜索了很多关于这个但没有得到任何满意的答案! BFS 在图中寻找最短路径的规则是: 我们发现所有连接的顶点, 将它们添加到队列中,并且 存储从源 u 到该顶点 v 的距离(重量/长度). 更新从源 ..

如何检测有向图是否循环?

我们如何检测有向图是否有环?我想使用广度优先搜索,但我不确定.有任何想法吗? 解决方案 通常使用深度优先搜索来代替.不知道BFS好不好用. 在DFS中,生成树是按照访问顺序构建的.如果访问了树中节点的祖先(即创建了后边缘),则我们检测到一个循环. 参见 http://www.cs.nyu.edu/courses/summer04/G22.1170-001/6a-Graphs-M ..

对加权图使用 BFS

我正在修改单源最短路径算法,在视频中,老师提到BFS/DFS不能直接用于在最短路径中查找最短路径强>加权图(我想每个人都已经知道了)并说要自己找出原因. 我想知道为什么它不能用于加权图的确切原因/解释.是由于边缘的重量还是其他原因?有人可以解释一下,因为我感到有点困惑. PS:我经历了这个 问题和这个问题. 解决方案 考虑这样的图表: A---(3)-----B||\-(1) ..
发布时间:2021-12-24 14:20:11 其他开发