Cod sursa(job #599389)

Utilizator mihai.ortelecanOrtelecan Mihai alexandru mihai.ortelecan Data 28 iunie 2011 16:47:07
Problema Generare de permutari Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.84 kb
/*
 * permutari.c
 *
 *  Created on: Jun 28, 2011
 *      Author: mihai
 */

#include <stdio.h>
#define MAX 8

int N;

int check(int * sol, int poz, int val) {
	int i, j;
	sol[poz] = val;
	for (i = 0; i < poz; i++) {
		if (sol[i] == val)
			return 0;
	}

	if (poz == N - 1) {

		for (i = 0; i < N; i++) {
			for (j = 0; j < N && j != i; j++) {
				if (sol[i] == sol[j])
					return 1;
			}
		}

		for (i = 0; i < N; i++)
			printf("%d ", sol[i] + 1);
		printf("\n");
	}
	return 1;
}

void back(int poz, int* sol) {

	if (poz >= N)
		return;

	int j;

	for (j = 0; j < N; j++) {
		if (check(sol, poz, j)) {
			sol[poz] = j;
			back(poz + 1, sol);
		}
	}

}

int main() {

	freopen("permutari.in", "r", stdin);
	freopen("permutari.out", "w", stdout);

	int sol[MAX], i;
	scanf("%d", &N);
	for (i = 0; i < N; i++)
		sol[i] = -1;

	back(0, sol);

	return 0;
}