¿Cuál es el algoritmo óptimo para hacer todas las combinaciones posibles de una cadena?

Encuentro otra pregunta similar demasiado complicada.

Creo que significa que si nos dan el bote, entonces las combinaciones serán pot opt ​​top pot pto pot

Así que escribí el siguiente 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);
        }
    }

¿Hay alguna manera mejor?

Respuestas a la pregunta(2)

Su respuesta a la pregunta