Pagini recente » Autentificare | Profil vdev | Cod sursa (job #3360590) | Cod sursa (job #3361262) | Cod sursa (job #3362960)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector <int> v;
bool negzt_permutation(int start, int enduh) {
int s = enduh-start+1;
vector <int> v_sortat(s), v_nou(s);
for (int i = 0;i<enduh-start+1;i++) {
v_nou[i] = v[i+start];
}
sort(v_nou.begin(), v_nou.end(), greater<int>());
for (int i = 0;i<(int)v_nou.size();i++) {
v_sortat[i] = v_nou[i];
}
bool ok = true;
for (int i = 0;i<s;i++) {
if (v[i+start] != v_sortat[i]) {
ok = false;
break;
}
}
if (ok) {
sort(v.begin()+start, v.begin()+enduh+1);
return false;
}
int i = enduh;
while (i > start && v[i] < v[i-1]) {
i--;
}
int poz = i-1;
int st = poz+1, dr = enduh, rez = poz+1;
while (st <= dr) {
int mij = (dr+st)/2;
if (v[mij] <= v[poz]) {
dr = mij-1;
}
else {
st = mij+1;
rez = mij;
}
}
int aux = v[rez];
v[rez] = v[poz];
v[poz] = aux;
sort(v.begin()+poz+1, v.begin()+enduh+1);
return true;
}
int main()
{
int n;
cin>>n;
v.resize(n);
for (int i = 0;i<n;i++) {
v[i] = i+1;
cout<<v[i]<<" ";
}
cout<<'\n';
while (negzt_permutation(0, n-1)) {
for (auto x : v) {
cout<<x <<" ";
}
cout<<'\n';
}
return 0;
}