1 #include<bits/stdc++.h>
2 using namespace std;
3 void dfs(int x){
4 if(x==0)
5 return;
6 cout<<x<<endl;
7 dfs(x-1);
8 cout<<"*"<<x<<endl;
9 }
10 int main(){
11 dfs(5);
12 return 0;
13 }
1 回溯算法的一般形式如下:
2 void dfs(int k) { // k代表递归层数,或者说要填第几个空
3 if(所有空已经填完了){
4 判断最优解/记录答案;
5 return;
6 }
7 for (枚举这个空能填的选项)
8 if (这个选项是合法的){//查看这个情况有没有被占位
9 记录下这个空(保存现场);//有时还需占位,例如四阶数独中的行、列、块记录
10 dfs(k+1);
11 取消这个空(恢复现场);//如果占位了还需要取消占位
12 }
13 }
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 }