php 广度优先搜索,广度优先搜索(BFS)算法

在本教程的这一部分中,将讨论使用哪些技术,可以遍历图的所有顶点。

遍历图表表示访问图的所有节点和顶点。 使用两种标准方法,可以遍历图。接下来将详细讨论它们中。

广度优先搜索

深度优先搜索

1. 广度优先搜索(BFS)算法

广度优先搜索是一种图遍历算法,它从根节点开始遍历图并探索所有相邻节点。 然后,它选择最近的节点并浏览所有未探测的节点。 对于每个最近的节点,该算法遵循相同的过程,直到找到目标为止。

下面给出了广度优先搜索的算法。算法从检查节点A及其所有邻居开始。在下一步中,搜索A的最近节点的邻居,并且在后续步骤中继续处理。 该算法探索所有节点的所有邻居,并确保每个节点只访问一次,并且没有访问任何节点两次。

算法

第1步:设置状态 = 1(就绪状态)

对于G中的每个节点

第2步:将起始节点A排队

并设置其状态 = 2

(等待状态)

第3步:重复第4步和第5步,直到

队列是空的

第4步:使节点N出列。处理它

并设置其状态 = 3

(处理状态)。

第5步:将所有邻居排队

N处于就绪状态

(其STATUS = 1)并设置它们状态 = 2

(等待状态)

[循环结束]

第6步:退出

示例

考虑下图中显示的图G,计算从节点A到节点E的最小路径p。给定每条边的长度为1。

c0c7343d4538977e146c8489e7d5efba.png

解答:

最小路径P可以通过应用广度优先搜索算法找到,该算法将从节点A开始并将以E结束。算法使用两个队列,即QUEUE1和QUEUE2。 QUEUE1保存要处理的所有节点,而QUEUE2保存从QUEUE1处理和删除的所有节点。

下面来看看节点A 中的图。

将A添加到QUEUE1,将NULL添加到QUEUE2。QUEUE1 = {A}

QUEUE2 = {NULL}

从QUEUE1中删除节点A并插入其所有邻居,将节点A插入QUEUE2。

QUEUE1 = {B, D}

QUEUE2 = {A}

从QUEUE1中删除节点B并插入其所有邻居。 将节点B插入QUEUE2。

QUEUE1 = {D, C, F}

QUEUE2 = {A, B}

从QUEUE1中删除节点D并插入其所有邻居。 由于F是已插入的唯一邻居,因此不会再插入它。 将节点D插入QUEUE2。

QUEUE1 = {C, F}

QUEUE2 = { A, B, D}从QUEUE1中删除节点C并插入其所有邻居。 将节点C添加到QUEUE2。

QUEUE1 = {F, E, G}

QUEUE2 = {A, B, D, C}

从QUEUE1中删除F并添加其所有邻居。由于已经添加了所有邻居,不会再添加它们。 将节点F添加到QUEUE2。

QUEUE1 = {E, G}

QUEUE2 = {A, B, D, C, F}从QUEUE1中删除E,所有E的邻居都已添加到QUEUE1,因此不会再添加它们。 访问所有节点,并且目标节点即E遇到QUEUE2。

QUEUE1 = {G}

QUEUE2 = {A, B, D, C, F, E}

现在,使用QUEUE2中可用的节点从E回溯到A。

最小路径为:A→B→C→E。

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值