depth-first-search相关内容

Dfs算法,决定有向图是否具有唯一的拓扑排序

我试图构造一个使用DFS的算法来决定给定的有向图是否具有唯一的拓扑排序。 我对这个问题的解决方法是只有一个特定的图形具有唯一的拓扑排序。而且这个图形是一个像图一样的链,其中所有的顶点在一条线上相互连接。 我的两难困境是如何做一个有效的DFS算法,以及我应该检查什么。 解决方案 From here 因此,您运行DFS,并且您需要检查从起始顶点开始走的最长路径是否具有长度| V ..
发布时间:2018-05-25 17:54:18 其他开发

从图中消除顶点

从Skiena的书中,设计一个线性时间算法,通过将边(u,v)和(v)替换为图2中的每个顶点v, ,w)由边(u,w)表示。我们还试图通过用单个边替换它们来消除多个边的副本。请注意,删除边的多个副本可能会创建一个新度数为2的顶点,必须将其移除,并且删除度数为2的顶点可能会创建多个边,这些边也必须移除。 一般来说,我至少有一个办法,对于这个问题,我很无奈。这不是Hw,而仅仅是我自己的面试准备。 ..

提升DFS如何保存访问顶点?

我在寻找解决方案这里,这对我不起作用(但是在===行下阅读才能看到当前的问题)。 I尝试: boost :: undirected_dfs(G,vertex(0,G),boost :: visitor(vis)); 但是我得到 error C2780:'void boost :: undirected_dfs(const Graph&,const boost ..
发布时间:2018-05-25 17:44:06 C/C++开发

在图中找到所有可能的路径

我正在寻找一些算法,它可以帮助我在图表中找到所有可能的路径。我发现的所有东西都不是完全令人满意的。 让我们假设我们有一个像这样的图(树): 让我们使用一些像广度优先搜索或深度优先搜索。作为回报,我们会得到像 1,2,4,(2),5,(2),6, (2),(1),3,7,8,(7),9 我们如何通过这棵树,这不是我正在寻找的。我很想得到所有路径,例如: ..

全连通有向图中所有可能的非循环简单路径的数量是多少?

假设我们有一个完全连通的图 G ,其中 N 顶点并且 M 边缘。 图形有多少条边?它是 M = N ^ 2 ? 如果我们取一个顶点并开始以深度访问其邻居首先搜索“方式并避免循环,我们会得到多少个非循环简单路径? 例如,如果我们从包含4个顶点的图形中的顶点1开始,那么这里是路径: - 1 - 1,2 - 1,3 - 1,4 - 1,2,3 ..
发布时间:2018-05-25 17:37:36 其他开发

用迭代深化编写DFS而无需递归

因此,目前我有一个DFS,伪码如下: pre code> procedure DFS(图形,源代码): create一个堆栈S 将源压入S 标记源 ,同时S不为空: 从S中弹出一个项目到v 为每个边缘发生事件v in图: 如果w未标记,则让w为e 的另一端: mark w 将w推到S 如何修改此函数以接受限制搜索深度的第三个参数? 解决方案 为图的每个节点设 ..

我如何学习Tarjan的算法?

我一直试图从维基百科学习Tarjan的算法3个小时,但我无法做到头或尾。 :() http://en.wikipedia.org/wiki / Tarjan's_strongly_connected_components_algorithm#cite_note-1 为什么它是DFS树的子树?(实际上DFS生成一个目录林?o_O) 为什么 v.lowlink = v.index 意味着 ..
发布时间:2018-05-25 17:22:49 其他开发

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

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

非递归深度优先搜索(DFS)使用堆栈

好的,这是我在Stack Overflow上的第一篇文章,我一直在阅读一段时间,真的很欣赏这个网站。我希望这是可以接受的要求。所以我一直在阅读“算法入门”(Cormen。MIT Press),我一直都在使用图算法。我一直在研究正式的算法,为广度和深度首先搜索细节非常详细。 以下是深度优先搜索的伪代码: p> DFS(G) -------------------- --------- ..
发布时间:2018-05-25 17:16:14 其他开发

用回溯来解释BFS和DFS

深度优先搜索(DFS)是一个$ b $的深度优先搜索: b算法用于遍历或搜索 a树,树结构或图。一个 从根开始(在图例中选择一些 节点作为根节点) ,并且在回溯之前尽可能沿着每个分支探索 。 那么什么是广度优先搜索? “选择开始 节点,检查所有节点 backtracks , 选择最短路径,选择邻居节点 backtracks , 选择最短路径,最后 找到最佳路径, ..

使用DFS检测图中的周期:2种不同的方法,有什么不同

我听说有两种方法可以在图表中找到一个循环: 保留一组布尔值来跟踪您之前是否访问过节点。如果你用完了新的节点(无需击中已经存在的节点),那么只需回溯并尝试其他分支即可。 来自Cormen的CLRS或Skiena:对于无向图中的深度优先搜索,有两种类型的边缘,即树和背面。这个图有一个循环,当且仅当存在一个后沿。 有人可以解释什么是后沿的图表,以及上述两种方法之间的区别。 谢谢。 ..
发布时间:2018-05-25 17:02:40 其他开发

查找图中的所有循环,还原

我知道在这个问题上存在相当多的答案。然而,我发现他们中的任何一个都没有把它真正带到这个地步。 有人认为一个循环与强连通的组件(几乎)是一样的(查找有向图中的所有循环),因此可以使用为该目标设计的算法。 有些人认为找到 a 周期可以通过DFS完成,并检查后端边缘(对文件依赖性的boost图形文档)。 我现在想对图中的 all 周期是否可以通过DFS检测并检查后端边缘提供一些建议? ..
发布时间:2018-05-25 16:57:15 其他开发

图搜索与树搜索

图表搜索和树形搜索与DFS有关的版本与人工智能中的A *搜索有什么区别? 解决方案 从现有的答案来看,这个概念似乎存在很多混淆。 问题总是一个图 树搜索和图搜索的区别并不在于事实不管你的问题是树还是图。它总是假定你正在处理一个图。区别在于遍历模式用于搜索图形,图形可以是图形或树形。 如果你正在处理一个树状问题问题,两种算法变体都会导致相同的结果。因此,您可以选择更简单的树 ..
发布时间:2018-05-25 16:55:00 其他开发

函数式早期退出深度优先递归

我有一个关于以函数式编写递归算法的问题。我将在这里使用Scala作为示例,但这个问题适用于任何函数式语言。 我正在做一个深度优先的枚举 n -ary树,其中每个节点都有一个标签和一个可变数量的子级。这是一个简单的实现,它打印叶节点的标签。 case class Node [T](label:T,ns :Node [T] *) def dfs [T](r:Node [T]):Seq ..

从Erlang定向循环图中的一个顶点找到所有可能的路径

我想实现一个函数,它在有向循环图G中从源顶点V中找到所有可能的顶点的所有可能路径。 现在,我只是想了解这个算法。我已经阅读了深度优先搜索算法的定义,但是我没有完全理解该做什么。 我没有任何完成的代码提供在这里,因为我不知道如何: 存储结果(与A-> B-> C->我们还应该存储A-> B和A-> B-> C); 代表图形(有向图?元组列表?); 要使用多少递归(与每个相邻顶点 ..
发布时间:2017-08-27 12:29:02 其他开发语言

C ++通过引用传递

我最近(4天)开始学习C ++来自C / Java背景。为了学习一种新的语言,我开始重新实现不同的经典算法,因为语言的具体我可以。 我来到这个代码,它的一个DFS - 深度优先在未定向图中搜索。仍然从我读的是最好的传递参数在C ++中的引用。不幸的是,我不能完全理解参考的概念。每次我需要一个参考,我很困惑,我认为在指针。在我现在的代码中,我使用传递值。 这里的代码(可能不是Cpptho ..
发布时间:2016-12-14 13:50:33 C/C++开发