fbpx

Problema #125 – Permutari2 – Rezolvari PBInfo

de Mihai-Alexandru

Cerinţa

Se citeşte un număr natural nenul n, apoi n numere naturale distincte. Să se afişeze, în ordine lexicografică, permutările mulţimii formate din cele n numere citite.

Date de intrare

Fişierul de intrare permutari2.in conţine pe prima linie numărul n, ia r pe a doua linie n numere naturale.

Date de ieşire

Fişierul de ieşire permutari2.out va conţine pe fiecare linie elementele unei permutări, separate prin câte un spaţiu.

Restricţii şi precizări

  • 0 < n < 9
  • cele n numere de pe a doua linie a fişierului de intrare sunt mai mici decât 100

Exemplu

permutari2.in

3
4 7 3

permutari2.out

3 4 7 
3 7 4 
4 3 7 
4 7 3 
7 3 4 
7 4 3 
#include <bits/stdc++.h>

using namespace std;

ifstream cin("permutari2.in");
ofstream cout("permutari2.out");

int n , x[10] , p[10] , a[10];

void afisare()
{
    for(int i = 1 ; i <= n ; i++)
        cout << a[x[i]] << " ";
    cout << '\n';
}

void back(int k)///k = poz la care am ajuns
{
    for(int i = 1 ; i <= n ; i++)///de unde se ia x[k]
        if(!p[i]) ///daca nu e pus anterior
        {
            x[k] = i;///pun elementul
            p[i] = 1;///l am folosit pe i
            if(k == n) afisare();///solutie
            else back(k + 1);///trec la poz urmatoare
            p[i] = 0;///marchez ca nefolosit
        }
}

int main()
{
    cin >> n;
    for(int i = 1 ; i <= n ; i++)
        cin >> a[i];
    sort(a + 1 , a + n + 1);
    back(1);///incep generarea de la 1
    return 0;
}
Comentarii

S-ar putea sa iti placa