You are on page 1of 4

QUICKSORT cout<<v[i]<<' ';

#include<iostream> cout<<endl<<endl;}
#include<fstream> int poz(int st, int dr, int v[])
#include<cstdlib> { int aux=v[st];
using namespace std; while(st<dr)
void generare() { while(st<dr &&
v[dr]>=aux)
{ int n, i, x;
dr--;
cout<<"Dati dimenstiunea
vectorului: "; v[st]=v[dr];
cin>>n; while(v[st]<v[dr] &&
v[st]<=aux)
ofstream f("sort.in");
st++;
f<<n;
v[dr]=v[st];}
f<<endl;
v[st]=aux;
srand(time(NULL));
return st;}
for(i=1; i<=n; i+
+)//www.cplusplus.com/reference void quicksort(int st, int dr, int v[])
{ x=rand()%1000; { int mij=poz(st,dr,v);
f<<x<<' ';} if(st<mij)
f.close();} quicksort(st,mij-1,v);
if(mij<dr)
void citire(int v[], int &n) quicksort(mij+1,dr,v);}
{ int i; int main()
ifstream f("sort.in"); { int v[100], n;
f>>n; generare();
for(i=1; i<=n; i++) citire(v,n);
f>>v[i];} afis(v, n);
quicksort(1,n,v);
void afis(int v[], int n) afis(v,n);
{ int i; return 0;}
for(i=1; i<=n; i++)
/*n=4 => 1 , return 0;}
12,123,1234,124,13,134(alt model de
SURSA OK COMBINARI
Backtracking) ,14,2,23,234,24,3,34,4
*/ #include<iostream>
#include<iostream> using namespace std;
using namespace std; int s[20], n, sol, m;
int n, s[20], sol;

void combinari(int i)
void combinari(int i) {
{ if(i>m)
if(i>1) {
{ for(int j=1; j<=m; j++)
cout<<"{"; cout<<s[j]<<' ';
for(int j=1; j<=i-1; j++) cout<<endl;
cout<<s[j]<<' '; sol++;
cout<<"}"; }
cout<<endl; else
sol++; for(int j=s[i-1]+1;j<=n;j+
+)
}
{
for(int j=s[i-1]+1; j<=n; j++)
s[i]=j;
{
combinari(i+1);
s[i]=j;
}}
combinari(i+1);
}
int main()
}
{
int main()
// S e variabila globala => s[0]=0
{
cin>>n>>m;
cin>>n;
combinari(1);
combinari(1);
cout<<sol<<" solutii";
cout<<sol<<" solutii";
return 0;}
FCTII INJECTIVE /*Se citesc m viz[j]=0;}}
si n m<=n
int main()
toate fctiile injective f:{1,2,3,..m}->{1,
{ cout<<"Nr val din dom de def";
2, 3..n}
cin>>m;
x1!=x2 =>f(x1) !=f(x2)
cout<<"Nr val din codomeniu";
?? pt fiecare elem din dom de def ;
cin>>n;
?? care e imag in codomeniu ;
backtracking(1);
=> imaginile trebuie sa fie diferite
=>aranjamente*/ cout>>"solutie"<<sol;
#include<iostream> return 0;}
using namespace std; SUBMULTIMI
int m, n, s[20], viz[20], sol; /*n=3 ;1,2,3,1 2,1 3,2 3,1 2 3=lipseste
multimea vida*/
void afis()
#include<iostream>
{ int i;
using namespace std;
for(i=1; i<=n; i++)
int n, m, s[20], sol;
void combinari(int i)
cout<<"f("<<i<<")="<<s[i]<<endl;
{ if(i>m)
sol++;
{ cout<<"{";
cout<<endl;
for(int j=1; j<=m; j++)
void backtracking(int i)
cout<<s[j]<<" ";
{ int j;
cout<<"}";
if(i>m)
cout<<endl;
afis();
sol++;}
else
else for(int j=s[i-1]+1; j<=n;
for(j=1;j<=n; j++) j++)
if(viz[j]==0) { s[i]=j;
{ s[i]=j; combinari(i+1);}}
viz[j]=1; int main()
{cin>>n;
backtracking(i+1);
for(m=1; m<=n; m++)
combinari(1); return 0;
cout<<sol<<" solutii"; return // aceeasi diagonala /*
0;}
for(k=1; k<i; k++)
METODA BACKTRACKING REGINE
if(i-k == abs(s[k]-j))
#include<iostream>
return 0;*/
#include<cmath>
return 1;}
using namespace std;;
void regine(int i) //i = numarul liniei pe
int n, s[20], sol; care se cauta o coloana
// s{linie}=coloana { if(i>n) //am solutie, am construit
s[1]... s[n]
//sol= cate solutii are problema
afis();
void afis() //s[linie]= coloana
else
{ int i, j;
for(int j=1; j<=n; j++)
sol++;
//multimea de solutii posibile
for(i=1; i<=n; i++)
if(verif(i, j)==1)
{ for(j=1; j<=n; j++) //verifica daca pe linia este buna

if(s[i]==j) {s[i]=j; // am
pus nr coloaniei pe pozitia i
cout<<"* ";
regine(i+1); //
else trec la constructia urmat linii }}
cout<<". "; // intoarcerea se face pt ca gvoi cobori
cout<<endl; } din stiva, pt alta solutie pe nivele
anterioare, fac suprascriere
cout<<"--------------\n";}
int verif(int i, int j) // pe liniaq i verific
daca este buna coloana j int main()

{ int k; {

//aceeasi linie=OK, din cin>>n;


constructie regine(1);
//aceeasi coloana, propunerea j cout<<sol<<" solutii";
sa nu fie in valorile s[1]. s[2.. s[n]
return 0;
for(k=1; k<i; k++)
}
if(s[k]==j || i-k==abs(s[k]-
j)) //724 de soltuii daca introducem nr 10;

You might also like