递归方法,参考 https://blog.csdn.net/nicolelts/article/details/48661707

#include <iostream>
#include <algorithm>

using namespace std;

void permute(string s, int i) {
    if (i >= s.size()) {
        cout << s << endl;
        return;
    }
    for (int j=i; j<s.size(); j++) {
        swap(s[i], s[j]);
        permute(s, i+1);
    }
    return;
}

int main(){
    string s;
    cin >> s;
    sort(s.begin(),s.end());
    permute(s,0);
}

另一种方法:
使用c++自带的STL全排列 坑点在于每个样例输出完都要换一行,但是如果你每次换一行的写,自测是不会通过的。所以不要管自测结果,直接提交。
https://blog.csdn.net/qian2213762498/article/details/79683905

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main(){
    string str;
    while(cin>>str){
        sort(str.begin(),str.end());
        do{
            cout<<str<<endl;
        }while(next_permutation(str.begin(),str.end()));
        cout<<endl;
    }
    return 0;
}