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 }
5 4 3 2 1 *1 *2 *3 *4 *5
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 }
转载自: https://www.cnblogs.com/zhangqixun/p/17069009.html