Pagini recente » Cod sursa (job #2585495) | Cod sursa (job #2347833) | Cod sursa (job #761727) | Cod sursa (job #821429) | Cod sursa (job #3345744)
#include <iostream>
#include <fstream>
#define FIN "permutari.in"
#define FOUT "permutari.out"
#define SIZE 100
using namespace std;
int stack[SIZE], n, level;
void init() {
stack[level] = 0;
}
int succ() {
if (stack[level] < n) {
stack[level]++;
return 1;
}
return 0;
}
int valid() {
for (int i = 1; i < level; i++) {
if (stack[i] == stack[level]) return 0;
}
return 1;
}
int sol() {
return level == n;
}
void display_solution() {
for (int i = 1; i <= n; i++) cout << stack[i] << " ";
cout << endl;
}
//varianta iterativa
void backtracking() {
int h, v;
level = 1;
init();
while (level > 0) {
h = 1;
v = 0;
while (h && !v) {
h = succ();
if (h) {
v = valid();
}
}
if (h) {
if (sol()) {
display_solution();
}
else {
level++;
init();
}
}
else {
level--;
}
}
}
int main() {
cout << "n=";
cin >> n;
backtracking();
return 0;
}