广度优先搜索(BFS)

Posted manok

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了广度优先搜索(BFS)相关的知识,希望对你有一定的参考价值。

  前面介绍了深度优先搜索,可知DFS是以深度作为关键词的,即当碰到岔道口时总是先选择其中的一条岔路前进,而不管其它的岔路,

直到碰到死胡同时才返回岔道口并选择其它岔路。接下来介绍的广度优先搜索(Breadth First Search,BFS)则是以广度为第一关键词,

当碰到岔道口时,总是先依次访问从该岔道口能直接到达的所有结点,然后再按这些结点被访问的顺序去依次访问它们能够直接到达的所有

结点,以此类推,直到所有结点都被访问为止。

  广度优先搜索(BFS)一般由队列实现,且总是按层次的顺序进行遍历,其基本写法如下(可以当做模板使用):

 1 void BFS(int s){
 2     queue<int> q;
 3     q.push(s);
 4     while(!q.empty()){
 5         取出队首元素top;
 6         访问队首元素top;
 7         将队首元素出队;
 8         将top的下一层结点中未曾入队的结点全部入队,并设置为已入队; 
 9     }    
10 }

下面举一个例子,我们可以从中学习BFS的思想是如何通过队列来实现的。

题目链接:BFS识别矩阵中的块数

以上是关于广度优先搜索(BFS)的主要内容,如果未能解决你的问题,请参考以下文章

广度优先搜索(BFS)的一个(重要!)细节。

DFS-深度优先搜索与BFS-广度优先搜索

基本算法——深度优先搜索(DFS)和广度优先搜索(BFS)

广度优先搜索(BFS)----------------(TjuOj1140_Dungeon Master)

面试刷题:广度优先搜索BFS | 第91期

使用BFS(广度优先搜索)解迷宫类问题