Перестановки#2169

Перестановки (Розбір)

У цій задачі необхідно згенерувати всі перестановки чисел від до . Це можна зробити, наприклад, використовуючи функцію next_permutation.

Реалізація алгоритму

Масив буде використовуватися для генерації перестановок.

int m[10];

Читаємо вхідне значення .

scanf("%d",&n);

Ініціалізуємо масив початковою перестановкою 1~2~3~...~n, починаючи з першого індексу.

for (i = 1; i <= n; i++)
  m[i] = i;

Використовуючи функцію next_permutation, генеруємо всі перестановки — від лексикографічно найменшої до лексикографічно найбільшої.

do
{

Виводимо кожну згенеровану перестановку в окремому рядку.

  for (i = 1; i <= n; i++) 
    printf("%d ",m[i]);
  printf("\n");
} while (next_permutation(m + 1, m + n + 1));

Реалізація алгоритму — вектор

Вектор буде використовуватися для генерації перестановок.

vector<int> v;

Читаємо вхідне значення .

scanf("%d", &n);

Ініціалізуємо масив початковою перестановкою 1~2~3~...~n, починаючи з нульового індексу.

v.resize(n);
for (i = 0; i < n; i++) 
  v[i] = i + 1;

Використовуючи функцію next_permutation, генеруємо всі перестановки — від лексикографічно найменшої до лексикографічно найбільшої.

do
{

Виводимо кожну згенеровану перестановку в окремому рядку.

  for (i = 0; i < n; i++)
    printf("%d ", v[i]);
  printf("\n");
} while (next_permutation(v.begin(), v.end()));