void Podstav int std cout Генерация всех перестановок лексикографическ

 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
void Podstav (int n)
{
std::cout << "Генерация всех перестановок в лексикографическом порядке:" << std::endl;
int i = 0,j = 0,tmp,min,nmi;
int* x=new int [n];
for(i = 0; i < n; i++)
x[i] = i+1;
while(true)
{
for(i = 0; i < n; i++)
std::cout<<x[i]<<" ";
std::cout<<std::endl;
for(i = n-2; i >= 0 && x[i+1] < x[i]; i--);
if(i==-1) break;
min = 100000;
nmi = i;
for(j = i+1; j < n; j++)
if(x[j] > x[i] && x[j] < min)
{
min = x[j];
nmi = j;
}
x[nmi] = x[i];
x[i] = min;
for(j = i+1; j <= (i+n)/2; j++)
{
tmp = x[j];
x[j]=x[i+n-j];
x[i+n-j]=tmp;
}
}
}