广度优先搜索(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识别矩阵中的块数