AcWing 3429. 全排列

题目如下:

给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。

我们假设对于小写字母有 a<b<…<y<z,而且给定的字符串中的字母已经按照从小到大的顺序排列。

输入格式

输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在 11 到 66 之间。

输出格式

输出这个字符串的所有排列方式,每行一个排列。

要求字母序比较小的排列在前面。

字母序如下定义:

已知 S=s1s2…sk,T=t1t2…tk,则 S<T等价于,存在 p(1≤p≤k),使得 s1=t1,s2=t2,…,sp−1=tp−1,sp<tp成立。

数据范围

字符串的长度在 11 到 66 之间

输入样例:

abc

输出样例:

abc
acb
bac
bca
cab
cba
#include <bits/stdc++.h>

using namespace std;

void dfs(string s, vector<bool> visited, string res, int cur) {
    if(cur == s.size()) {
        cout << res << endl;
        return;
    }
    for(int i= 0; i < s.size(); i++) {
        if(!visited[i]) {
            visited[i] = true;
            res += s[i];
            dfs(s,visited, res, cur+1);
            visited[i] = false;
            res.pop_back();
        }
    }
}

int main() {
    string s = "";
    cin >> s;
    vector<bool> visited(s.size(), false);
    dfs(s,visited, "", 0);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_72758935/article/details/132667018