#include<stdio.h>

#define MAX_REINAS	8
#define MAX_SIZE	8
#define REINA	'r'
#define VACIA	' '
#define TRUE	1
#define FALSE	0

typedef struct {
	int	f; // 1..8
	char	c; // a..h
} t_reina;

typedef struct {
	int	reinas;
	t_reina	r[MAX_REINAS];
} t_reinas;

typedef struct {
	int	size;
	char	c[MAX_SIZE][MAX_SIZE];
} t_tablero;

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

	printf("Problema de las ocho reinas\n");
	printf("Cuantas reinas?\n");
	scanf("%d%*c", &rs.reinas);

	for(i=0; i<rs.reinas; i++) {
		do {
			printf("Intro pos reina %d [a1..h8]: ", i+1);
			scanf("%c%d%*c", &rs.r[i].c, &rs.r[i].f);
		} while (rs.r[i].c<'a' || rs.r[i].c>='a'+rs.reinas ||
			 rs.r[i].f<1   || rs.r[i].f>=1  +rs.reinas);

	}

	t.size = rs.reinas;
	for(f=0, f<t.size; f++) {
		for(c=0, c<t.size; c++) {
			t.c[f][c] = VACIA;
		}
	}

	for(i=0; i<rs.reinas; i++) {
		 t.c[rs.r[i].f-1][rs.r[i].c-'a'] = REINA;
	}

	printf("abcdefgh\n");
	for(f=t.size-1; f>=0; f--) {
		printf("%d", f+1);
		for(c=0, c<t.size; c++) {
			printf("%c", t.c[f][c]);
		}
		printf("%d\n", f+1);
	}
	printf("abcdefgh\n");

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

	if (sin_amenazas) {
		printf("Sin amenazas.\n");
	}

}

