Chiamerò "parole" le combinazioni di caratteri e "alfabeto" l'insieme dei simbolie caratteri da usare.
Il tuo algoritmo deve costruire tutte le parole possibili fino ad ottenere una parola uguale a quella inserita?
A priori sai già la lunghezza della parola da trovare o devi partire a provare le parole di lunghezza 1?
Esempio: la parola inserita è "ciao", e usi le sole lettere minuscole, parti da 'a' o da 'aaaa'?
Una volta chiarito questo punto puoi pensare a un approccio "a orologio", a ogni iterazione (a ogni test) modifichi l'ultimo carattere, una volta che arrivi all'ultimo simbolo dell'alfabeto, passi al simbolo successivo del penultimo carattere della parola e ripeti l'intero ciclo. Quando avrai permutato tutti i penultimi simboli, modifichi il terzultimo e ripeti l'intero processo per gli ultimi due simboli.
Non so se non stato chiaro, comunque pensa a come funziona un orologio a lancette o anche a uno digitale: l'ultima cifra (la seconda cifra dei secondi) cambia sempre ad ogni secondo, ogni volta che passa per zero, la prima cifra dei secondi sale di uno. E la prima cifra dei secondi, al posto di saltare a 6, torna a zero e fa scattare la seconda cifra dei minuti. E così via, il concetto è lo stesso.
Per implementarlo potresti usare un array contenente l'alfabeto da usare e dei puntatori che scorrono sull'array, i puntatori saranno i singoli simboli.