Cod sursa(job #54823)

Utilizator sir_icemasterGeorge Guraliuc sir_icemaster Data 25 aprilie 2007 19:48:25
Problema Dame Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <stdio.h>
#define NMAX 1001

int n, sol[NMAX], done;
int cused[NMAX];
int dlused[2001], dcused[2001];
#define dlused (dlused+1000)
void place(int k) {
	if (k == n) {
		int i;
		done = 1;
		printf("%d\n", n);
		for (i = 0; i < n; ++i)
			printf("%d %d\n", i+1, sol[i]+1);
	}
	else if (!done) {
		int i;
		for (i = 0; i < n; ++i) {
			if (!(cused[i] || dlused[k-i] || dcused[k+i])) {
				cused[i] = 1, dlused[k-i] = 1, dcused[k+i] = 1;
				sol[k] = i;
				place(k+1);
				cused[i] = 0, dlused[k-i] = 0, dcused[k+i] = 0;
			}
		}
	}
}
int main() {
	FILE *fi = freopen("dame.in", "r", stdin);
	FILE *fo = freopen("dame.out", "w", stdout);
	scanf("%d", &n);
	place(0);
	return 0;
}