Напечатать все перестановки чисел 1..n

Напечатать все перестановки чисел 1..n (то есть последовательности длины n, в которые каждое из чисел 1..n входит по одному разу).


Ответы (1 шт):

Автор решения: A K

Это классический алгоритм, во многих учебниках даётся описание. Поскольку вы не уточняли, что конкретно нужно — вот вам самая простая для понимания реализация:

void Main()
{
    char[] a = "123".ToCharArray();
    Permute(a, 0, a.Length - 1);
}

void Permute(char[] a, int i, int n)
{
    int j;

    if (i == n)
    {
        Console.WriteLine(new string(a));
    }
    else
    {
        char temp;
        for (j = i; j <= n; j++)
        {
            // swap(a[i], a[j]);
            temp = a[i];
            a[i] = a[j];
            a[j] = temp;

            Permute(a, i + 1, n);

            // swap(a[i], a[j]);
            temp = a[i];
            a[i] = a[j];
            a[j] = temp;
        }
    }
}

Вывод:

введите сюда описание изображения

И классическая картинка-пояснение (мысленно подставьте вместо строки "123" "ABC"):

введите сюда описание изображения

→ Ссылка