Pagini recente » Cod sursa (job #1871697) | Cod sursa (job #2189885)
#include <iostream>
#include <fstream>
using namespace std;
// globals
fstream outFile("permutari.out", ios::out);
void back(int n);
void init_perm(int* p, int n);
void print_perm(int* p, int n);
bool is_valid(int* p, int position);
int main() {
fstream inFile("permutari.in", ios::in);
int N = 0;
// read the number of elements
inFile >> N;
// compute using backtraking
back(N);
// end
inFile.close();
outFile.close();
}
void back(int n) {
int * permutare = new int[n];
init_perm(permutare, n);
int v = 0;
while (v >= 0) {
permutare[v]++;
if ( (permutare[v] <= n) && (is_valid(permutare, v)) ) {
if (n - 1 == v)
print_perm(permutare, n);
else
v++;
}
else if (permutare[v] > n){ // move v back a position
permutare[v] = 0;
v--;
}
}
delete[] permutare;
}
void init_perm(int* p, int n) {
for (int i = 0; i < n; *(p + i) = 0, i++);
}
void print_perm(int* p, int n) {
for (int i = 0; i < n - 1; i++)
outFile << p[i] << " ";
outFile << p[n - 1] << endl;
}
bool is_valid(int* p, int position) {
for (int i = 0; i < position; i++) {
if (p[i] == p[position])
return false;
}
return true;
}