Ich möchtes den oben genannten Algorithmus in c# implementieren. Den pseudocode habe ich auf Wikipedia gefunden. Nachdem ich keine Lösung gefunden habe habe ich gegoogelt.
public static IEnumerable<IEnumerable<T>> Permute<T>(this IList<T> v)
{
ICollection<IList<T>> result = new List<IList<T>>();
Permute(v, v.Count, result);
return result;
}
private static void Permute<T>(IList<T> v, int n, ICollection<IList<T>> result)
{
if (n == 1)
{
result.Add(new List<T>(v));
}
else
{
for (var i = 0; i < n; i++)
{
Permute(v, n - 1, result);
Swap(v, n % 2 == 1 ? 0 : i, n - 1);
}
}
}
private static void Swap<T>(IList<T> v, int i, int j)
{
var t = v[i];
v[i] = v[j];
v[j] = t;
}
Könnte das vielleicht jemand Zeile für Zeile mit mir durchgehen? Ich verstehe nicht genau was es mit den typparametern auf sich hat. Es wirkt auf mich wie generics aber so ganz fällt der Groschen nicht. Irgendwie sitze ich einfach auf dem Schlauch was genau da passiert.
Kann mir jemand helfen?