欢迎光临散文网 会员登陆 & 注册

102. 103. 107. | 宽度优先搜索(BFS)

2020-05-25 09:58 作者:有木乘舟  | 我要投稿


  BFS,其英文全称是Breadth First Search,宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。它属于盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。

  从算法的观点,所有因为展开节点而得到的子节点都会被加进一个先进先出的队列中。一般的实验里,其邻居节点尚未被检验过的节点会被放置在一个被称为 open 的容器中(例如队列或是链表),而被检验过的节点则被放置在被称为 closed 的容器中。(open-closed表)。


分析:

  BFS通常采用层次遍历的方式来遍历整个图(树),它利用队列数据结构来存储未遍历过的但即将遍历的点(open-list),因此如何判断已经遍历完一层,是非常关键的一点。

  在这题里,队列中存储的都是同一层的节点,因此可以直接拿来计算。

   两道题的唯一区别就是最后 res 的插入方式,一个是insert插入到开头,一个是push_back插入到尾部。

  提交后发现,insert函数比push_back函数要慢的多,因此107.这题要优化的话,可以从这个点入手。

分析:

  还是一样的题目,只需要加入个条件判断是否到了需要翻转节点顺序的层数即可。

  

102. 103. 107. | 宽度优先搜索(BFS)的评论 (共 条)

分享到微博请遵守国家法律