#include <stdio.h>

#define SIZE	8
#define REINA	'r'
#define VACIA	' '
#define FALSE	0
#define TRUE	1

typedef struct {
	int	f;
	char	c;
} t_casilla;

typedef struct {
	t_casilla cas[SIZE];
	int reinas;
} t_reinas;

typedef struct {
	char cas[SIZE][SIZE];
	int size;
} t_tablero;

int main() {
	t_tablero t;
	t_reinas rs;
	int f, c, i, j;
	int fi, ci, fj, cj;
	int sin_amenazas;

	printf("Problema de las N-reinas\n");
	printf("¿Cuantas reinas introdudcirás? ");
	scanf("%d%*c", &rs.reinas);
	for (i = 0; i < rs.reinas; i++) {
		do {
			printf("Intro coord de la reina %d: ", i+1);
			scanf("%c%d%*c", &rs.cas[i].c, &rs.cas[i].f);
		} while (
			rs.cas[i].f > rs.reinas || rs.cas[i].f < 1 ||
			rs.cas[i].c >= 'a'+rs.reinas || rs.cas[i].c < 'a'
		);
	}
	t.size = rs.reinas;
	for (f = 0; f < t.size; f++) {
		for (c = 0; c < t.size;c++) {
			t.cas[f][c] = VACIA;
		}
	}
	for (i = 0; i < rs.reinas; i++) {
		t.cas[rs.reinas - rs.cas[i].f][rs.cas[i].c-'a'] = REINA;
	}
	printf("  ");
	for (c = 0; c < t.size;c++) {
		printf("%c", c+'a');
	}
	printf("\n");
	for (f = 0; f < t.size; f++) {
		printf("%d ", t.size - f);
		for (c = 0; c < t.size;c++) {
			printf("%c", t.cas[f][c]);
		}
		printf("\n");
	}

	sin_amenazas = TRUE;

	for (i = 0; i < rs.reinas - 1; i++) {
		fi = rs.cas[i].f;
		ci = rs.cas[i].c;
		for (j = i + 1; j < rs.reinas; j++) {
			fj = rs.cas[j].f;
			cj = rs.cas[j].c;
			if (fj == fi ||
			    cj == ci ||
			    fj+cj == fi+ci ||
			    fj-cj == fi-ci
			    ) {
				printf("%c%d y %c%d se amenazan.\n",
						ci, fi, cj,fj);
				sin_amenazas = FALSE;
			}
		}
	}
	if (sin_amenazas) {
		printf("Es solucion\n");
	}

}

