题目描述:
输入一个字符串,打印出该字符串中所有字符的排列(不允许重复)
输入:
abc
输出:
abc acb bac bca cab cba
题解:
DFS+回溯思想
代码:
#include <bits/stdc++.h>
using namespace std;
int vis[99999];
string str, ans;
map<string, string> mp;
void dfs(int x) {
if (x == str.length() && mp[ans] != ans) { //通过MAP判断重复
mp[ans] = ans;
cout << ans << " ";
return;
}
for (int i = 0; i < str.length(); i++) {
if (vis[i] == 0) {
ans[x] = str[i];
vis[i] = 1;
dfs(x + 1);
vis[i] = 0;
}
}
return;
}
int main(int argc, char const *argv[]) {
cin >> str;
ans = str;
dfs(0);
return 0;
}