先来了解一些关于队列的函数(结果附在每行结束):

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main(){
 4     queue<int> a;
 5     cout<<a.empty()<<endl;//1
 6     a.push(10);//{10}
 7     cout<<a.front()<<endl;//{10}
 8     cout<<a.empty()<<endl;//0
 9     a.pop();//{}
10     cout<<a.empty()<<endl;//1    
11         
12     a.push(12);
13     a.push(13);
14     a.push(14);//{12,13,14}
15     cout<<a.front()<<endl;//{12}
16     
17     return 0;
18 } 

这样再理解广度优先搜索的算法就简单多了:

1     Q.push(初始状态); // 将初始状态入队
2     while (!Q.empty()) {
3         State u = Q.front(); // 取出队首
4         Q.pop();//出队
5         for (枚举所有可扩展状态) // 找到u的所有可达状态v
6             if (是合法的) // v需要满足某些条件,如未访问过、未在队内等
7                 Q.push(v); // 入队(同时可能需要维护某些必要信息)
8     }