DFS回溯算法 字符串排列

题目描述:

输入一个字符串,打印出该字符串中所有字符的排列(不允许重复)

输入:

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;
}

猜你喜欢

转载自blog.csdn.net/qq_45462923/article/details/115430575