版权声明:即使允许了也不得转载 https://blog.csdn.net/weixin_43213056/article/details/88756200
深度搜索模板的套路:
先判断是否达到目标状态
如果达到,判断当前状态是否合法是否计入答案。
未达到,枚举可能的状态,记录本轮选择,进入下一层。
返回后,消除影响。
全排列(DFS)
#include <iostream> using namespace std; int n, a[100], vis[100], t; void dfs(int cur) { if (cur == n + 1) { for (int k = 1; k <= n; k++) cout << a[k]; cout << endl; t++; return; } else { for (int i = 1; i <= n; i++) { if (vis[i] == 0) { a[cur] = i; vis[i] = 1; dfs(cur + 1); vis[i] = 0; } } } } int main() { cin >> n; dfs(1); cout << "Total=" << t; return 0; }
运行结果:
next_permutation方法:
#include <iostream> #include <algorithm> using namespace std; int a[3] = { 1,2,3 }; int main() { do { cout << a[0] << " " << a[1] << " " << a[2] << endl; } while (next_permutation(a, a + 3)); return 0; }
运行结果:
转载请标明出处:全排列(回溯法与next_permutation)
文章来源: https://blog.csdn.net/weixin_43213056/article/details/88756200