Pagini recente » Cod sursa (job #1912783) | Cod sursa (job #3002448) | Cod sursa (job #1253675) | Cod sursa (job #1783588) | Cod sursa (job #852394)
Cod sursa(job #852394)
#include<iostream>
#include<fstream>
using namespace std;
int n;
int *v;
ifstream fin("permutari.in");
ofstream fout("permutari.out");
int valid (int k) { //returneaza 0 daca nr de pe pozitia k exista pe una din pozitiile 1..k-1
for (int i=1;i<k;i++) {
if (v[i]==v[k])
return 0;
}
return 1;
}
void back (int k) {
if (k<1) //dc primul nivel nu mai poate fi incrementat -> s-a term
return;
if (k == n+1) {
for (int i=1;i<=n;i++)
fout<<v[i]<<' ';
fout<<'\n';
v[k]=0; //dc am gasit o sol, niv crt il fac 0
back(k-1);
}
else {
if (v[k]<n) { //daca nr crt e mai mic decat n
v[k]++; //il incrementam
if (!valid(k)) //daca nu e valid
back(k); //incercam urmatorul nr de pe nivelul crt
else
back(k+1); // daca e valid, trecem la niv urmator
}
else { //daca nr crt nu e mai mic decat n
v[k]=0; //il facem 0
back(k-1); //si trecem la nivelul anterior
}
}
}
int main () {
fin>>n;
v = new int[n+1];
for (int i=0;i<=n;i++)
v[i]=0;
back(1);
fin.close();
fout.close();
//system("PAUSE");
}