7得票3回答
在Haskell中广度优先构建一个二叉树(非二叉搜索树)

我最近开始使用 Haskell,很可能只会用一小段时间。只是因为我在上大学的一个课程中被要求使用它来更好地理解函数式编程。 现在我遇到了一个小问题。我正在尝试按广度优先的方式构建它,但我觉得我的条件有些混乱,或者我的条件也可能是错误的。 因此,如果我输入 [“A1-Gate”, “Nort...

8得票3回答
BFS和DFS搜索在树中需要标记为已访问吗?

看到BFS和DFS算法,它们似乎会将节点标记为已访问。如果我只遍历树,那么我的实现是否仍需要标记节点为已访问?我想对每个节点执行某些操作,确保每个节点只执行一次。 看起来只有在存在循环的图形中才需要这样做,否则可能会重复遇到相同的节点。如果我递归地调用树,那么没有必要设置访问状态,因为我可以...

21得票4回答
'回溯'和'分支限界法'的区别

在回溯算法中,我们同时使用广度优先搜索和深度优先搜索。即使在分支界限算法中,我们也会使用广度优先搜索和深度优先搜索以及最小代价搜索。 那么何时使用回溯算法,何时使用分支界限算法呢? 使用分支界限算法是否会降低时间复杂度? 分支界限算法中的最小代价搜索是什么?

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

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

9得票3回答
Prolog中的广度优先搜索算法

在Prolog中使用广度优先搜索方案的一般想法是什么? 不选择无限分支? 在Prolog中使用广度优先搜索的一般方法是否存在?我已经在Google上搜索了一些资料,但对于新手来说并没有找到太多有用信息。

28得票4回答
双向搜索的终止条件

根据我所读的大部分内容,双向搜索算法被认为是在“前向”和“后向”边界首次相交时终止的。然而,在《人工智能:一种现代方法》第3.4.6节中,Russel 和 Norvig 指出: “通过用检查两个搜索的边界是否相交来替换目标测试来实现双向搜索;如果它们相遇,则已找到解决方案。重要的是要意识到,...

8得票1回答
在Haskell中从BFS输出重构一个图

我希望在Haskell中重构一个图的发生结构,该结构由其广度优先遍历的输出给出。明确地说,输出包括一个根节点和一个邻域列表(邻域是一个标记为新或旧(=已访问)的顶点列表),其中每个邻域对应于尚未分配到邻域的最小顶点。 在任何命令式语言中,我会使用队列来解决这个问题: Input: roo...

68得票5回答
寻找最短路径时,BFS算法和Dijkstra算法有什么区别?

我在阅读关于图算法的内容时,发现了这两个算法: 迪杰斯特拉算法(Dijkstra's algorithm) 广度优先搜索(Breadth-first search) 在查找节点之间的最短路径时,Dijkstra算法和BFS有什么区别? 我搜索了很多关于这个问题的内容,但都没有得到令人满意的...

26得票1回答
解释BFS和DFS在回溯方面的含义

关于深度优先搜索的维基百科: 深度优先搜索(DFS)是一种用于遍历或搜索树、树结构或图的算法。在图的情况下,从根节点开始(选择某些节点作为根),沿每个分支尽可能远地探索,然后回溯。 那么什么是广度优先搜索? “一种算法,选择一个起始节点,检查所有节点并回溯,选择最短路径,选择相邻节点并回...

90得票11回答
查找两个图节点之间的所有路径

我正在实现Dijkstra算法,以检索路由网络上互连节点之间的最短路径。我已经成功实现了算法。当我将起始节点传递到算法中时,它返回所有节点的最短路径。 我的问题是: 如何从节点A检索到节点G的所有可能路径,或者甚至是从节点A返回到节点A的所有可能路径?