搜索与回溯算法基本思想
为了求得问题的解,先选择某一种可能情况向前探索,在探索的过程中,一旦发现原来的选择是错误的,就退回一步重新选择,继续向前探索,如此反复进行,直至得到解或证明无解。
#include<iostream>
using namespace std;
string s;
const int N = 1e2 + 10;
bool vis[N];
char cnt[N];
//搜索与回溯算法的模板
void dfs(int depth) {
//5.终止条件
if (depth > s.size()) {
//打印原则:搜多少打多少
for (int i = 1; i < depth; i++) cout << cnt[i];
cout << endl;
return;
}
//1.枚举方案
for (int i = 0; i < s.size(); i++) {
//2.标记-防止重复搜索
if (!vis[i]) {
//3.搜索
vis[i] = 1;
cnt[depth] = s[i];
dfs(depth + 1);
//4.回溯
vis[i] = 0;
}
}
}
int main() {
cin >> s;
dfs(1);
return 0;
}