• 广度优先搜索(BFS)


    定义

           维基百科:https://zh.wikipedia.org/wiki/%E5%B9%BF%E5%BA%A6%E4%BC%98%E5%85%88%E6%90%9C%E7%B4%A2

           给定图G=(V,E)和一个可识别的源结点s,广度优先搜索对图G中的边进行系统性的探索来发现可以从源结点s到达的所有结点。该算法能够计算从源结点s到每个可到达结点的距离(最少的边数),同时生成一棵“广度优先搜索树”。该树以源结点s为根结点,包含所有可从s到达的结点。该算法始终是将已发现结点和未发现结点之间的边界,沿其广度方向扩展,也即是说,算法需要在发现所有距离源结点s为k的所有结点之后,才会发现距离源结点s为k+1的其他结点。

          Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。

    基本实现思想

            (1)顶点v入队列。

            (2)当队列非空时则继续执行,否则算法结束。

            (3)出队列取得队头顶点v;访问顶点v并标记顶点v已被访问。

            (4)查找顶点v的第一个邻接顶点col。

            (5)若v的邻接顶点col未被访问过的,则col入队列。

            (6)继续查找顶点v的另一个新的邻接顶点col,转到步骤(5)。

            (7)直到顶点v的所有未被访问过的邻接点处理完。转到步骤(2)。

              广度优先遍历图是以顶点v为起始点,由近至远,依次访问和v有路径相通而且路径长度为1,2,……的顶点。为了使“先被访问顶点的邻接点”先于“后被访问顶点的邻接点”被访问,需设置队列存储访问的顶点。

    伪代码

           (1)初始化队列Q;visited[n]=0;

           (2)访问顶点v;visited[v]=1;顶点v入队列Q;

            (3) while(队列Q非空)   

                     v=队列Q的对头元素出队;

                     w=顶点v的第一个邻接点;

                     while(w存在) 

                         如果w未访问,则访问顶点w;

                         visited[w]=1;

                         顶点w入队列Q;

                         w=顶点v的下一个邻接点。

     附:BFS的有趣应用:http://www.cnblogs.com/baiyanhuang/archive/2011/04/17/1999196.html

  • 相关阅读:
    python使用代理访问服务器
    python请求服务器时如何隐藏User-Agent
    python利用有道翻译实现“语言翻译器”的功能
    python请求服务器图片并下载到本地磁盘
    python的搜索路径与包(package)
    Python生成器(yield)
    Python迭代器(斐波拉切数列实例)
    Python定制容器
    Python描述符:property()函数的小秘密
    Python类属性访问的魔法方法
  • 原文地址:https://www.cnblogs.com/darklights/p/5308840.html
Copyright © 2020-2023  润新知