depth-first-search相关内容

使用回溯(而非DFS)背后的直觉

我正在解决LeetCode.com上的单词搜索问题: 给出一个2D板和一个单词,找出单词是否存在于网格中。 该单词可以由顺序相邻的单元格的字母构成,其中“相邻”单元格是水平或垂直相邻的单元格。相同的字母单元不得重复使用。 我在在线帮助下编写的解决方案如下: class解决方案{ public: //将其与最大岛屿面积进行比较: //它们的“外观”相似,但是此方法 ..
发布时间:2020-06-03 21:57:43 C/C++开发

我们不能在未加权图中找到DFS(修改的DFS)的最短路径吗?如果没有,那为什么呢?

据说DFS不能用于在未加权图中找到最短路径。我已经看过多个帖子和博客,但由于对DFS进行一些修改可以使之成为可能,所以不满意。 我认为,如果我们以这种方式使用经过修改的DFS,那么我们可以找到距源的最短距离。 初始化从根到距离的数组,其中无穷大且距离为 遍历时,我们一直跟踪否。的边缘。向前移动时,编号边的数量,而后退轨道的减量的边缘。然后每次检查if(dist(v)> dist(u) ..
发布时间:2020-06-03 21:24:28 其他开发

如何查找图形是否具有循环?

我知道这个问题已经在这个论坛以及互联网上的其他地方问过很多次了。但是在您张开双爪攻击我之前,请先忍受我。 我是一个新手学习图。作为练习的一部分,我被允许在Graph类中添加方法hasCycle()在这里 http://homepage.cs.uiowa.edu/~sriram/21/fall05/ExamplePrograms/ReaderFiles/Chap13/dfs/dfs.java ..
发布时间:2020-06-03 21:20:42 Java开发

在无向图上查找和打印O(n)复杂度简单循环的算法

给出图G(V,E),无向图。 | E | = m,| V | = n 该图的数据结构为邻接列表 如何查找和打印复杂度为 O(n)的简单循环(或打印没有这样的循环)? (如果有循环,输出应该是循环的一部分的顶点列表。) 我知道如何根据 O的复杂度找到循环(n),互联网上也有人。 我的问题是如何打印它。 这是我尝试做的事情: D ..
发布时间:2020-06-03 21:01:40 其他开发

图表-如何避免在深度优先搜索中两次重新处理同一边?

算法设计手册很好地描述了BFS和DFS。在决定是否避免双重处理时,本书中的dfs代码存在问题。我找到了勘误表,并将勘误表应用于代码,但仍然我认为经过精炼的代码存在检查双重处理边缘的问题。 我按如下所示粘贴精炼代码: dfs(graph * g,int v){ edgenode * p; int y; 如果(完成)返回; 发现[v] = TRUE; 时间=时间+ 1; ..
发布时间:2020-06-03 20:58:40 其他开发

钉单人纸牌–在深度优先搜索中检查钉与检查孔

我正在尝试使用深度优先的搜索算法来解决“纸牌接龙”-因为“现代计算机可以轻松地在合理的时间内检查 所有游戏位置”。即使过了23小时, 算法也找不到任何解决方案。我进行了一次网络搜索,发现了文件 “深度优先搜索可解决钉纸牌” 。我尝试从文件 中尝试c程序,并且在程序启动后立即找到了第一个解决方案。我比较了 算法。算法之间的主要区别在于它们查找 可能的钉跳的方式。当我的算法从左上 到右下 ..
发布时间:2020-06-03 20:57:12 其他开发

如何根据节点的深度优先顺序索引计算完美二叉树中节点的级别?

我有一棵完美的二叉树,即树中的每个节点要么是一个叶节点,要么有两个子节点,而所有叶节点处于同一级别。每个节点都有一个深度优先的索引。 (例如,在具有3个级别的树中,根节点的索引为0,第一个子节点为1,第一个子节点第一个孩子的中的一个有2,第一个孩子的第二个孩子有3,第二个孩子有4,第二个孩子的第一个孩子有5,第二个孩子的第二个孩子具有索引6。 0 / \ 1 4 / \ ..
发布时间:2020-06-03 20:56:38 其他开发

BFS和DFS在二叉树上的运行时间是否为O(N)?

我意识到,一般图上BFS和DFS的运行时间为O(n + m),其中n是节点数,m是边数,这是因为对于每个节点,必须考虑其邻接表。但是,当在二进制树上执行BFS和DFS时,其运行时是什么?我认为应该是O(n),因为可以从一个节点移出的边缘的可能数量是恒定的(即2)。请确认这是否是正确的理解。如果不是,那么请解释二叉树上BFS和DFS的正确时间复杂度是什么? 解决方案 BFS 和 DFS 只是 ..

深度优先图算法的时间复杂度

我开始学习时间复杂度,我在示例中查看了一些简单的时间复杂度。 我想知道如何计算具有 | V | = n 和 | E | = m ,让开始节点为'u',结束节点为'v'。 解决方案 DFS的时间复杂度为O(n + m)。考虑到我们只访问每个节点一次并且在树(没有循环)的情况下,我们越过所有边缘一次的事实,我们得到了这种复杂性。 例如,如果起始节点为u,终止节点为v,我们考虑的是最 ..
发布时间:2020-06-03 20:35:39 其他开发

为什么说深度优先搜索会遭受无限循环的困扰?

我已经阅读了有关 DFS 和 BFS 很多次,但我对此疑问一直困扰不已。在很多文章中都提到DFS可能陷入无限循环。 据我所知,通过跟踪访问者可以轻松地消除此限制。节点。实际上,在我读过的所有书中,这张小支票都是DFS的一部分。 那么为什么提到“无限循环”是DFS的缺点?仅仅是因为原始DFS算法没有对访问的节点进行此检查吗?请解释。 解决方案 (1)在图搜索算法中[在AI上经常使 ..

在六角形网格中找到所有长度为n的可能路径

假定一个函数采用 s (原边六边形), f (目标六边形)和 n (路径的长度)值作为参数,并输出所有长度为n的可能路径的列表。要显示问题,请检查下图: 让我们说我们的起源( s )是红色的虚线十六进制(2,3)和目标( f )是蓝色的虚线的(5,2)。我们希望分5步到达蓝色虚线的十六进制( n = 5 )。还应考虑到,如果步行到达特定的十六进制,则在下一步中也可能会停留在该十六进制中。换句 ..

使用DFS在有向图中找到最长的周期

我需要使用DFS在有向图中找到最长的循环。 我曾经见过这篇Wikipedia文章,描述了这样做的方法,并且我认为它已经接近该问题类似于将节点标记为以下三种状态之一:节点尚未访问,完成搜索节点以及节点已访问但尚未完成访问。 如果有人可以与我分享链接,将不胜感激。顺便说一下,它不是塔里安的算法。 下面的问题是我要解决的问题,以防万一您想知道。 > 第一行中给出的两位数字是N和M ..
发布时间:2020-06-03 20:05:44 其他开发

在DFS中为顶点使用3种状态有什么好处?

在《坚果壳算法》(第二版)中对深度优先搜索(DFS)的解释中,作者使用了3种状态表示顶点,例如 white (未访问),灰色(有未访问的邻居),黑色(已访问)。 两个状态(白色和黑色)足以进行遍历。为什么要添加灰色状态? 解决方案 这是Da算法的一种变体,显示在 Coerman等人的算法简介。 当您使用3种颜色代替时只有2个,它为您提供了更多信息。拳头,它使您可以在算法运行期间 ..
发布时间:2020-06-03 19:58:39 其他开发

为什么深度优先搜索声称可以节省空间?

在我正在学习的算法课程中,据说深度优先搜索(DFS)比宽度优先搜索(BFS)更加节省空间。 为什么? 尽管它们基本上是在做相同的事情,但在DFS中,我们堆叠了当前节点的后继者,而在BFS中,则是在排队后继者。 解决方案 您的困惑源于以下事实:您显然假设可以通过用LIFO堆栈替换FIFO队列来从BFS算法获得DFS算法。 这是一个流行的误解-事实并非如此。无法通过将BFS队 ..

深度优先搜索的递归实现,以查找Java中两个节点之间的路径

我正在尝试实现DFS的递归版本,以便在两个节点之间进行深度优先搜索. 这是我的代码.如果存在路径,该方法将返回true,并且它还会更新节点的prev字段以跟踪该路径.我已经使用堆栈实现了这种非递归方式,并且效果很好,这是public boolean recursiveDFS(String start, String end){ clearAll(); Vertex source = vertexM ..
发布时间:2020-05-25 02:55:10 Java开发