Ho tentato di scrivere un'implementazione di Heap's Algorithm in C# che non funziona correttamente. Sto provando a creare un'implementazione generica che trovi tutte le permutazioni di una stringa e le aggiunga a una lista.L'implementazione C# dell'algoritmo di Heap non funziona
Sto iniziando come questo:
List<string> permutations = new List<string>();
GenerateHeapPermutations(3, "ABC", permutations);
foreach (var p in permutations)
{
Console.WriteLine(p);
}
Console.ReadKey();
Ed ecco la mia realizzazione:
public static void GenerateHeapPermutations(int n, string s, List<string> sList)
{
if (n == 1)
{
sList.Add(s);
}
else
{
for (int i = 0; i < n - 1; i++)
{
GenerateHeapPermutations(n - 1, s, sList);
if (n % 2 == 0)
{
// swap the positions of two characters
var charArray = s.ToCharArray();
var temp = charArray[i];
charArray[i] = charArray[n - 1];
charArray[n - 1] = temp;
s = new String(charArray);
}
else
{
var charArray = s.ToCharArray();
var temp = charArray[0];
charArray[0] = charArray[n - 1];
charArray[n - 1] = temp;
s = new String(charArray);
}
}
GenerateHeapPermutations(n - 1, s, sList);
}
}
L'algoritmo fa cedere il corretto numero di permutazioni (in questo caso, sei), ma il le stesse permutazioni non sono corrette:
ABC BAC CBA
BCA ABC BAC
Non penso di deviare dallo pseudocode example of Heap's algorithm on Wikipedia, e ho difficoltà a eseguire il debug di questo a causa della natura ricorsiva di questo algoritmo (piuttosto difficile da concettualizzare).
Qualcuno può offrire qualche idea su quale potrebbe essere il problema?
P.S. Non fare i compiti, solo per divertimento.
Dalla pseudo-codice: 'procedura di generare (n: intero, A : array di any): ', ma hai' GenerateHeapPermutations (int n, string s, List sList) '- perché l'argomento stringa extra? –
Tim
@Tim sta solo salvando le stringhe permute. – Karthik
Alex, ho modificato il mio codice, quindi non mi ripeterò. –