先来了解一些关于队列的函数(结果附在每行结束):
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 }