Qual é o algoritmo ideal para fazer todas as combinações possíveis de uma string?

Eu acho outra pergunta semelhante muito complicada.

Eu acho que isso significa que se nos derem pote, então as combinações serão pote.

então escrevi o seguinte código:

#include<iostream>
#include<string.h>
using namespace std;

int main(){

    char s[10];
    char temp;
    cin>>s;
    char t[10];
    for(int i=0;i<3;i++)
    {
        for(int j=i;j<3;j++)
        {

            strcpy(t,s);
            temp=s[i];
            s[i]=s[j];
            s[j]=temp;

            cout<<s<<"\n";
            strcpy(s,t);
        }
    }

Existe uma maneira melhor ?

questionAnswers(2)

yourAnswerToTheQuestion