Pagini recente » Cod sursa (job #3138580) | Cod sursa (job #3339151) | Cod sursa (job #2393032) | Cod sursa (job #3332452) | Cod sursa (job #3353934)
// 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;
}