zoukankan      html  css  js  c++  java
  • 【转载】广搜详解


    宽度优先遍历Or宽度优先搜索详解

    在学习的时候发现这篇文章斜的特别好,立转

    宽度优先搜索(BFS, Breadth First Search)是一个针对图和树的遍历算法。发明于上世纪50年代末60年代初,最初用于解决迷宫最短路径和网络路由等问题。

    对于下面的树而言,BFS方法首先从根节点1开始,其搜索节点顺序是1,2,3,4,5,6,7,8。 
    这里写图片描述
    BFS使用队列(queue)来实施算法过程,队列(queue)有着先进先出FIFO(First Input First Output)的特性,BFS操作步骤如下: 
    1、把起始点放入queue; 
    2、重复下述2步骤,直到queue为空为止: 
    1) 从queue中取出队列头的点; 
    2) 找出与此点邻接的且尚未遍历的点,进行标记,然后全部放入queue中。

    下面结合一个图(graph)的实例,说明BFS的工作过程和原理: 
    (1)将起始节点1放入队列中,标记为已遍历: 
    这里写图片描述
    (2)从queue中取出队列头的节点1,找出与节点1邻接的节点2,3,标记为已遍历,然后放入queue中。 
    这里写图片描述
    (3)从queue中取出队列头的节点2,找出与节点2邻接的节点1,4,5,由于节点1已遍历,排除;标记4,5为已遍历,然后放入queue中。 
    这里写图片描述
    (4)从queue中取出队列头的节点3,找出与节点3邻接的节点1,6,7,由于节点1已遍历,排除;标记6,7为已遍历,然后放入queue中。 
    这里写图片描述
    (5)从queue中取出队列头的节点4,找出与节点4邻接的节点2,8,2属于已遍历点,排除;因此标记节点8为已遍历,然后放入queue中。 
    这里写图片描述
    (6)从queue中取出队列头的节点5,找出与节点5邻接的节点2,8,2,8均属于已遍历点,不作下一步操作。 
    这里写图片描述
    (7)从queue中取出队列头的节点6,找出与节点6邻接的节点3,8,9,3,8属于已遍历点,排除;因此标记节点9为已遍历,然后放入queue中。 
    这里写图片描述
    (8)从queue中取出队列头的节点7,找出与节点7邻接的节点3, 9,3,9属于已遍历点,不作下一步操作。 
    这里写图片描述
    (9)从queue中取出队列头的节点8,找出与节点8邻接的节点4,5,6,4,5,6属于已遍历点,不作下一步操作。 
    这里写图片描述
    (10)从queue中取出队列头的节点9,找出与节点9邻接的节点6,7,6,7属于已遍历点,不作下一步操作。 
    这里写图片描述
    (11)queue为空,BFS遍历结束。

     
     
     

    原博也是转载,未知原作者
     
    满堂花醉三千客,一剑霜寒十四州
  • 相关阅读:
    《计算机网络 自顶向下方法》整理(二)应用层
    《计算机网络 自顶向下方法》整理(一)计算机网络和因特网
    《深入理解C#》整理10-使用async/await进行异步编程
    STM32 HAL库之串口详细篇
    .Net微服务实战之负载均衡(下)
    面试官:来,年轻人!请手撸5种常见限流算法!
    工具用的好,下班回家早!iTerm2使用技巧指北!
    Java编程规范(命名规则)
    Go语言快速安装手册
    Educational Codeforces Round 6 620E. New Year Tree(DFS序+线段树)
  • 原文地址:https://www.cnblogs.com/phemiku/p/11410340.html
Copyright © 2011-2022 走看看