Cod sursa(job #3353934)

Utilizator robert.stefanRobert Stefan robert.stefan Data 12 mai 2026 18:41:47
Problema Generare de permutari Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
// https://www.infoarena.ro/problema/permutari

#include<fstream>

using namespace std;

ifstream fin("permutari.in");
ofstream fout("permutari.out");

// Descriere solutie:
// Generez toate permutarile multimii folosind tehnica backtracking.
// La fiecare nivel al recursiei backtracking-ului, 
// aleg un element ce nu a mai fost folosit anterior, 
// fiindca fiecare element apare o singura data in permutare.
// Solutia este completa daca nivelul recursiei a ajuns la n + 1.

// Complexitate de spatiu: O(n), datorita vectorului sol si a stivei de recursie
// Complexitate de timp: O(n * n!): 
// - numarul de permutari generate: n!
// - costul generarii unei permutari: n

int n;
int sol[9];
bool folosit[9];

void generarePermutari(int nivel) {
	if(nivel == n + 1) {
		for(int i = 1; i <= n; i++) {
			fout << sol[i] << " ";
		}

		fout << "\n";

		return;
	}

	for(int i = 1; i <= n; i++) {
		if(!folosit[i]) {
			sol[nivel] = i;
			folosit[i] = true;

			generarePermutari(nivel + 1);

			folosit[i] = false;
		}
	}
}

int main() {
	fin >> n;

	generarePermutari(1);

	fin.close();
	fout.close();

	return 0;
}