有人可以解释广度优先搜索以解决以下类型的问题
我需要找到4到7之间的所有路径
答案 0 :(得分:5)
您查看起始节点旁边的所有节点。然后查看与那些节点相邻的所有节点(不返回到您已经查看过的节点)。重复直到找到满足节点或没有更多节点。
对于您指出的问题类型,您使用上述过程构建一组路径,终止任何到达所需目标节点的路径,当图表耗尽时,终止的路径集合就是您的解决方案集。
答案 1 :(得分:4)
广度优先搜索(BFS)意味着您在进入更深层次之前处理所有起始节点的直接子节点。 BFS使用一个队列来实现,该队列存储需要处理的节点列表。
通过将起始节点添加到队列来启动算法。然后继续运行算法,直到队列中没有任何内容可以处理。
当您从队列中取出某个元素时,它将成为您的活动节点。处理活动节点时,将其所有子节点添加到队列的后面。当您有一个空队列时终止算法。
由于您正在处理图形而不是树,因此您需要存储已处理节点的列表,这样就不会进入循环。
到达节点7后,您将拥有匹配的路径,并且可以停止为该递归路径执行BFS。这意味着您根本不将其子项添加到队列中。为了避免循环并知道您访问过的确切路径,在进行递归BFS调用时,请调出已访问过的节点。
答案 2 :(得分:3)
将其视为具有指向其他网站的链接的网站。让A成为我们的根节点或我们的起始网站。
A is the starting page (Layer 1) A links to AA, AB, AC (Layer 2) AA links to AAA, AAB, AAC (Layer 3) AB links to ABA, ABB, ABC (Layer 3) AC links to ACA, ACB, ACC (Layer 3)
这只有三层深。您一次搜索一个图层。因此,在这种情况下,您将从A层开始。如果不匹配,请转到下一层,AA,AB和AC。如果这些网站都不是您要搜索的网站,那么请按照链接进入下一层。换句话说,您一次只能看一层。
深度优先搜索(其补码)您将从A到AA到AAA。换句话说,在去WIDE之前你会去DEEP。
答案 3 :(得分:2)
您测试连接到根节点的每个节点。然后测试连接到先前节点的每个节点。所以,直到找到答案为止。
基本上,每次迭代都会测试与根节点距离相同的节点。
答案 4 :(得分:1)
BEGIN
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;(失败)
END