本文概述
- 广度优先搜索(BFS)算法
- 算法
- 解
遍历图意味着检查图的所有节点和顶点。通过两种标准方法, 我们可以遍历图形。让我们详细讨论其中的每一个。
- 广度优先搜索
- 深度优先搜索
【图遍历算法(广度优先搜索算法)】广度优先搜索的算法如下。该算法开始于检查节点A及其所有邻居。在下一步中, 将探索A的最近节点的邻居, 然后继续执行其他步骤。该算法探索所有节点的所有邻居, 并确保每个节点仅被访问一次且没有节点被访问两次。
算法
- 步骤1:G中每个节点的SET STATUS = 1(就绪状态)
- 步骤2:使起始节点A入队并设置其STATUS = 2(等待状态)
- 步骤3:重复步骤4和5, 直到QUEUE为空
- 步骤4:使节点N出队。对其进行处理并设置其STATUS = 3(处理状态)。
- 步骤5:将所有处于就绪状态(状态STATUS = 1)的N邻居入队, 并将其状态STATUS = 2(等待状态)设置为[END OF LOOP]
- 步骤6:退出
考虑下图所示的图G, 计算从节点A到节点E的最小路径p。假定每个边的长度为1。
文章图片
解 最小路径P可以通过应用广度优先搜索算法找到, 该算法将在节点A处开始并在E处结束。该算法使用两个队列, 即QUEUE1和QUEUE2。 QUEUE1保留所有要处理的节点, 而QUEUE2保留所有要处理并从QUEUE1删除的节点。
让我们从节点A开始检查图形。
1.将A添加到QUEUE1, 将NULL添加到QUEUE2。
QUEUE1 = {A}QUEUE2 = {NULL}
2.从QUEUE1中删除节点A, 并插入其所有邻居。将节点A插入QUEUE2
QUEUE1 = {B, D}QUEUE2 = {A}
3.从QUEUE1中删除节点B, 然后插入其所有邻居。将节点B插入QUEUE2。
QUEUE1 = {D, C, F} QUEUE2 = {A, B}
4.从队列1中删除节点D, 然后插入其所有邻居。由于F是已插入的唯一邻居, 因此我们将不再插入。将节点D插入QUEUE2。
QUEUE1 = {C, F}QUEUE2 = { A, B, D}
5.从队列1中删除节点C, 然后插入其所有邻居。将节点C添加到QUEUE2。
QUEUE1 = {F, E, G}QUEUE2 = {A, B, D, C}
6.从QUEUE1中删除F并添加其所有邻居。由于已经添加了它的所有邻居, 因此我们将不再添加它们。将节点F添加到QUEUE2。
QUEUE1 = {E, G}QUEUE2 = {A, B, D, C, F}
7.从QUEUE1中删除E, 所有E的邻居都已添加到QUEUE1中, 因此我们将不再添加它们。所有节点都被访问, 并且目标节点即E遇到了QUEUE2。
QUEUE1 = {G}QUEUE2 = {A, B, D, C, F, E}
现在, 使用QUEUE2中可用的节点从E回溯到A。
最小路径为A→B→C→E。
推荐阅读
- 冒泡排序算法实现全解
- 比并排序算法实现详解
- B树实现详细步骤解析
- B+树实现详细步骤解析
- 二叉树(binary tree)实现详解
- RTO(恢复时间目标)与RPO(恢复点目标)有什么区别()
- 最新的19种最佳自动化测试工具合集(哪个更好())
- 漏洞扫描与渗透测试差异对比(有什么区别())
- 最新52种最佳DevOps工具合集(自动化、监控等)