Pagini recente » Cod sursa (job #2691433) | Cod sursa (job #1918264) | Cod sursa (job #2679152) | Cod sursa (job #1901734) | Cod sursa (job #2402313)
#include <fstream>
#include <iostream>
#include <vector>
#include <unordered_set>
using namespace std;
ofstream fout("permutari.out");
class Permutari {
public:
void solve() {
read_input();
vector<int> domeniu, solutie;
domeniu.reserve(n);
solutie.reserve(n);
unordered_set<int> visited;
k = 1;
int i;
for (i = 0; i < n; i++) {
domeniu.push_back(i + 1);
if (i < k) {
solutie.push_back(0);
}
}
perm(0, k, domeniu, solutie, visited);
}
private:
int n, k;
void read_input() {
ifstream fin("permutari.in");
fin >> n;
fin.close();
}
void printSol(vector<int> &solutie) {
for (int s : solutie) {
fout << s << " ";
}
fout << endl;
}
void perm(int step, int &k, vector<int> &domeniu, vector<int> &solutie, unordered_set<int> &visited) {
if (step == k || k == n) {
k++;
cout << k << endl;
printSol(solutie);
return;
}
unsigned int i;
for (i = 0; i < domeniu.size(); i++) {
if (visited.find(domeniu[i]) == visited.end()) {
visited.insert(domeniu[i]);
solutie[step] = domeniu[i];
k++;
perm(step + 1, k, domeniu, solutie, visited);
k = 0;
visited.erase(domeniu[i]);
}
}
}
};
int main() {
Permutari perms;
perms.solve();
fout.close();
return 0;
}