Cod sursa(job #3350652)

Utilizator robert.stefanRobert Stefan robert.stefan Data 11 aprilie 2026 16:24:37
Problema Generare de permutari Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
// https://www.infoarena.ro/problema/permutari

#include<fstream>

using namespace std;

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

int n;
int perm[9]; // vectorul cu permutarile
int folosit[9]; // initialziat cu 0, fiind declarat global. folosit[i] = 1 doar daca elementul i a fost adaugat deja in permutare

bool valid(int k) {
	if(folosit[perm[k]]) {
		// elementul perm[k] a fost deja adaugat in permutarea/solutia curenta, deci solutia/permutarea e invalida
		return false;
	}

	// pentru oricare caz in care elementul nu a fost adaugat anterior in solutia curenta, aceasta adaugae a elementului perm[k] este valida
	return true;
}

void BT(int k) {
	// k -> pozitia k din vectorul de permutari, perm
	if(k > n) {
		// am generat o permutare completa, pe care o afisez
		for(int i = 1; i <= n; i++) {
			fout << perm[i] << " ";
		}

		fout << endl;

		return;
	}

	// adaug, pe rand, elemente pe pozitia k a permutarii
	for(int i = 1; i <= n; i++) {
		perm[k] = i;

		if(valid(k)) {
			folosit[i] = 1;

			BT(k+1);

			folosit[i] = 0;
		}
	}
}

int main() {
	fin >> n;

	BT(1);

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

	return 0;
}