タイトル説明:
文字列を入力し、文字列内のすべての文字の順列を出力します (重複は許可されません)
入力:
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;
}