Pagini recente » Cod sursa (job #941605) | Cod sursa (job #1114370) | Cod sursa (job #2405805) | Cod sursa (job #669233) | Cod sursa (job #3211660)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("permutari.in");
ofstream out("permutari.out");
int v[9], marked[9], n;
//verificam de fiecare data cand introducem o valoare in vector, daca aceasta a mai fost deja introdusa.
//Vom folosi un vector caracteristic
// avem completate toate pozitiile de la 1 la pos - 1
// vrem sa completam pozitia pos
void bkt(int pos)
{
if(pos==n+1)
{
//am completat toate positiile, stim deja ca e o permutare, ne-am asigurat cand am construit solutia
//afisam
for(int i=1; i<=n; ++i)
out<<v[i]<<" ";
out<<'\n';
}
else
{
//completam pozitia pos
//trecem prin toate valorile posibile
for(int val=1; val<=n; ++val)
{
if(!marked[val]) //daca valoarea nu e marcata, adica marked[val]==0
{
v[pos]=val; //scriem valoarea in vector la positia pos
marked[val]=true; //marcam valoarea ca finnd folosita
bkt(pos+1); //apelam functia pentru pos+1
marked[val]=false; //la intoarcere, nu mai e folosita, o demarcam
}
}
}
}
int main()
{
in>>n;
for(int i=1; i<=n; ++i)
v[i]=i;
bkt(1);
return 0;
}