Перестановка букв строки: как удалить повторяющиеся перестановки?

Вот стандартная функция для печати перестановок символов в строке:

void permute(char *a, int i, int n)
{
   int j;
   if (i == n)
     printf("%s\n", a);
   else
   {
        for (j = i; j < n; j++) //check till end of string
       {
          swap((a+i), (a+j));
          permute(a, i+1, n);
          swap((a+i), (a+j)); //backtrack
       }
   }
} 

void swap (char *x, char *y)
{
    char temp;
    temp = *x;
    *x = *y;
    *y = temp;
}

Она работает нормально, но есть проблема, она также печатает некоторые повторяющиеся перестановки, например:

если строка - «AAB»

, вывод будет:

AAB
ABA
AAB
ABA
BAA
BAA

Это также имеет 3 повторяющиеся записи.

Можно ли как-нибудь предотвратить это?

-

Спасибо

Алок Кр.

11
задан SyncMaster 11 October 2012 в 19:07
поделиться