Cod sursa(job #3345744)

Utilizator MetalAweTiberiu Podareanu MetalAwe Data 10 martie 2026 21:16:58
Problema Generare de permutari Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#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;
}