Pagini recente » Borderou de evaluare (job #1974378) | Cod sursa (job #429565) | Cod sursa (job #2847660) | Diferente pentru problema/coduri intre reviziile 14 si 1 | Cod sursa (job #3350652)
// 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;
}