Pagini recente » Monitorul de evaluare | Cod sursa (job #1145314) | Cod sursa (job #1021498) | Cod sursa (job #1564089) | Cod sursa (job #1478259)
#include <iostream>
#include <vector>
using namespace std;
bool generateNextPermutation(vector<int>& currentPermutation) {
int first = -1;
for (int i = currentPermutation.size() - 1; i > 0; i--) {
if (currentPermutation[i] > currentPermutation[i - 1]) {
first = i - 1;
break;
}
}
if (first == -1)
return false;
int second = -1;
for (int i = currentPermutation.size() - 1; i > first; i--) {
if (currentPermutation[i] > currentPermutation[first]) {
second = i;
break;
}
}
int aux = currentPermutation[first];
currentPermutation[first] = currentPermutation[second];
currentPermutation[second] = aux;
int reverseSize = currentPermutation.size() - first - 1;
int size = currentPermutation.size();
for (int i = 0; i < reverseSize / 2; i++) {
int aux2 = currentPermutation[first + 1 + i];
currentPermutation[first + 1 + i] = currentPermutation[size - 1 - i];
currentPermutation[size - 1 - i] = aux2;
}
return true;
}
int main() {
freopen("permutari.in", "r", stdin);
freopen("permutari.out", "w", stdout);
int n;
scanf("%i", &n);
vector<int> p;
for (int i = 0; i < n; i++) {
p.push_back(i + 1);
printf("%i ", i + 1);
}
while(generateNextPermutation(p)) {
printf("\n");
for (int i = 0; i < n; i++) {
printf("%i ", p[i]);
}
}
fclose(stdin);
fclose(stdout);
return 0;
}