Documente Academic
Documente Profesional
Documente Cultură
Generarea permutrilor
Se citete un numr natural n. Se cere s se tipreasc toate permutrile mulimii {1,2,,n} n ordine
lexicografic. De exemplu, pentru n=3 avem
1 2 3, 1 3 2, 2 1 3, 2 3 1, 3 1 2, 3 2 1.
Definiie: Permutrile unei mulimi A cu n elemente reprezint toate modurile de aranjare a
elementelor mulimii A astfel nct fiecare element s fie scris o singur dat.
Reprezentarea soluiei: - fiecare component are valori n mulimea {1,2,.,n}
-soluia are n componente
Condiia de validare: - fiecare component apare o singur dat
Numrul permutrilor: n! = 1*2*...*n
Varianta iterativ
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
#include<iostream>
using namespace std;
int x[30];
int n,nr;
void tipar()
{
int i;
for(i=1;i<=n;i++)
cout<<x[i]<<' ';
cout<<'\n';
nr++;
}
int valid(int k)
{
int i;
for(i=1;i<k;i++)
if(x[i]==x[k])return 0;
return 1;
}
void back()
{
int i,k=1;
x[1]=0;
while(k>0)//stiva nu este vida
{
while(x[k]<n)
{
x[k]=x[k]+1;
if(valid(k))
if(k==n) tipar();
else
{k=k+1;x[k]=0;}
}
k=k-1;
}
}
int main()
{
cin>>n;
back();
cout<<nr;
}
Varianta recursiv
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
#include<iostream>
using namespace std;
int x[30];
int n,nr;
void tipar()
{
int i;
for(i=1;i<=n;i++)
cout<<x[i]<<' ';
cout<<'\n';
nr++;
}
int valid(int k)
{
int i;
for(i=1;i<k;i++)
if(x[i]==x[k])return 0;
return 1;
}
void back(int k)
{
int i;
if(k==n+1)tipar();
else
for(i=1;i<=n;i++)
{
x[k]=i;
if(valid(k)) back(k+1);
}
}
int main()
{
cin>>n;
back(1);
cout<<nr;
}
#include<iostream>
using namespace std;
int x[30],s[30];
int n;
void tipar()
{
int i;
for(i=1;i<=n;i++)
cout<<x[i]<<' ';
cout<<'\n';
}
int valid(int k)
{
int i;
for(i=1;i<k;i++)
if(x[i]==x[k])return 0;
return 1;
}
void back(int k)
{
int i;
if(k==n+1) tipar();
else
for(i=1;i<=n;i++)
if(s[i]==0)
{
x[k]=i;s[i]=1;
back(k+1);
s[i]=0;
}
}
int main()
{
cin>>n;
back(1);
}