【问题标题】:Can someone explain Breadth-first search?有人可以解释广度优先搜索吗?
【发布时间】:2009-04-04 22:44:42
【问题描述】:

有人可以解释广度优先搜索来解决以下类型的问题吗

我需要找到 4 到 7 之间的所有路径

【问题讨论】:

  • 强烈建议将作业问题标记为此类以避免投票。
  • 我不是cs学生..在我的日常工作中我想用这个算法来解决一些问题来找到所有的路径
  • 好的。在这种情况下,您用作示例的扫描作业问题往往会误导人们。
  • 我真的不介意将其标记为家庭作业...但我想尽快学习和应用...

标签: algorithm graph-theory breadth-first-search


【解决方案1】:

您查看与您的起始节点相邻的所有节点。然后您查看与这些节点相邻的所有节点(不返回您已经查看过的节点)。重复直到找到满意的节点或没有更多的节点。

对于您指出的那种问题,您使用上述过程构建一组路径,终止到达所需目标节点的任何路径,当您的图表用尽时,这样终止的一组路径就是您的解决方案集。

【讨论】:

  • 你能用伪代码/c++代码解释一下,这样我就可以学习如何去做
  • 这取决于你在做什么。您真的不能编写伪代码来对点进行广度优先搜索。这没有多大意义。网站将是一个很好的思考方式。想想网页上的链接列表。
【解决方案2】:

广度优先搜索 (BFS) 意味着您先处理所有起始节点的直接子节点,然后再进入更深层次。 BFS 是通过一个队列实现的,该队列存储需要处理的节点列表。

通过将起始节点添加到队列中来启动算法。然后你继续运行你的算法,直到队列中没有任何东西需要处理。

当您从队列中取出一个元素时,它会成为您的活动节点。在处理活动节点时,将其所有子节点添加到队列的后面。当队列为空时终止算法。

由于您处理的是图形而不是树,因此您需要存储已处理节点的列表,这样您就不会进入循环。

到达节点 7 后,您就有了匹配的路径,您可以停止对该递归路径执行 BFS。这意味着您根本不将其子项添加到队列中。为了避免循环并知道您访问过的确切路径,在您进行递归 BFS 调用时,请传递已经访问过的节点。

【讨论】:

  • “一旦到达”:不正确。他需要找到所有从 4 开始并在 7 结束的路径,而不仅仅是一个。
  • @chaos:不,因为 BFS 是递归的,当你停止时,你只会停止那一次迭代。停止我的意思是你不要将它的孩子添加到队列中。您仍然需要处理队列的其余部分。
  • @chaos:我的措辞可能并不完全清楚,所以我澄清了更多。感谢您指出这一点。
【解决方案3】:

将其视为带有指向其他网站的链接的网站。让 A 成为我们的根节点或我们的起始网站。

A 是起始页(第 1 层) A 链接到 AA、AB、AC(第 2 层) AA 链接到 AAA、AAB、AAC(第 3 层) AB 链接到 ABA、ABB、ABC(第 3 层) AC 链接到 ACA、ACB、ACC(第 3 层)

这只有三层深。您一次搜索一层。因此,在这种情况下,您将从 A 层开始。如果不匹配,则转到下一层,AA、AB 和 AC。如果这些网站都不是您要搜索的网站,那么您可以点击链接并转到下一层。换句话说,您一次只查看一层。

深度优先搜索(它的补充)你会从 A 到 AA 到 AAA。换句话说,你会在走向 WIDE 之前先去 DEEP。

【讨论】:

    【解决方案4】:

    您测试连接到根节点的每个节点。然后您测试连接到先前节点的每个节点。以此类推,直到找到答案。

    基本上,每次迭代都会测试与根节点距离相同的节点。

    【讨论】:

      【解决方案5】:

      开始

      4;

      4,2;

      4,2,1; 4,2,3; 4,2,5;

      4,2,1;(失败)4,2,3,6; 4,2,5,6; 4,2,5,11;

      4,2,3,6,7;(通过)4,2,3,6,8; 4、2、5、6、7;(通过)4、2、5、6、8; 4,2,5,11,12;

      4,2,3,6,8,9; 4,2,3,6,8,10; 4,2,5,6,8,9; 4,2,5,6,8,10; 4,2,5,11,12;(失败)

      4,2,3,6,8,9;(失败) 4,2,3,6,8,10;(失败) 4,2,5,6,8,9;(失败) 4, 2,5,6,8,10;(失败)

      结束

      【讨论】:

      • 以其他答案中描述的方式遍历图表。
      猜你喜欢
      • 2010-12-17
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多