Если вы можете использовать C ++, он уже предоставлен в стандартной библиотеке:
#include <algorithm>
#include <string>
#include <iostream>
int main() {
std::string a("AAABCC");
do {
std::cout << a << "\t";
} while (std::next_permutation(a.begin(), a.end()));
return 0;
}
Редактировать: вывод этого:AACCAB AACCBA ABAACC ABACAC ABACCA ABCAAC ABCACA ABCCAA ACAABC ACAACB ACABAC ACABCA ACACAB ACACBA ACBAAC ACBACA ACBCAA ACCAAB ACCABA ACCBAA BAAACC BAACAC BAACCA BACAAC BACACA BACCAA BCAAAC BCAACA BCACAA BCCAAA CAAABC CAAACB CAABAC CAABCA CAACAB CAACBA CABAAC CABACA CABCAA CACAAB CACABA CACBAA CBAAAC CBAACA CBACAA CBCAAA CCAAAB CCAABA CCABAA CCBAAA
Для тех, кто не может использовать C ++, Марк Нельсон написал статью в пользовательском журнале C / C ++ несколько лет назад, что может оказаться полезным.