Для заданного n получить все возможные перестановки чисел 1,2,...n - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Подскажите, как решается эта задача. Для заданного n получить все возможные перестановки чисел 1,2..n.

Решение задачи: «Для заданного n получить все возможные перестановки чисел 1,2,...n»

textual
Листинг программы
int n, m[100], c;
void perms(int k)
{
    if (k==n) {printf("%d:\t",++c); for (int i=0; i<n; i++) printf("%d", m[i]); printf("\n");}
    else for (int i=1; i<=n; i++) {
            int f=0; for (int j=0; j<k; j++) if (m[j]==i) f=1;
            if (f) continue;
            m[k] = i; perms(k+1);
        }
}
int _tmain(int argc, _TCHAR* argv[]) 
{
    printf("Input n (not so big :)) : "); scanf("%d", &n);
    c=0; perms(0);
    system("pause");
    return 0;
}

Объяснение кода листинга программы

В этом коде реализована функция генерации всех возможных перестановок чисел от 1 до n. Переменная n задаёт количество чисел, которые нужно переставить. Алгоритм основан на рекурсивном принципе. Функция perms() генерирует перестановки для каждого числа от 1 до n. Если число уже использовано в перестановке, то оно пропускается (это достигается с помощью переменной f). Если число не использовано, оно добавляется в перестановку (это достигается с помощью оператора присваивания m[k] = i). Затем функция вызывается рекурсивно для следующей перестановки (k+1). Главная функция _tmain() считывает число n с помощью функции scanf() и запускает процесс генерации перестановок с помощью функции perms(0). В конце программа ожидает нажатия клавиши с помощью функции system(pause) и завершается возвратом 0.

Оцени полезность:

10   голосов , оценка 4.1 из 5
Похожие ответы