Solución al problema de las ocho reinas
# include & ltgraphics.h & gt
# include & ltstdlib.h & gt
# include & ltstdio .h & gt
# include & ltdos.h & gt
char n[3]={\'0\ ',\' 0 \ '};/*para Registre qué conjunto de soluciones*/
int a[8], b[15], c[24], I;
int h[8]={127, 177, 227, 277, 327, 377, 427, 477 }; /* Coordenadas de fila de cada reina */
int l[8]= { 2522171821471127742, 7 } /* Coordenadas de columna de cada reina */
void *arrow;
void try(int i)
{ int j;
for(j = 1; j & lt=8;j++)
If(a[J-1]+b[I+J-2]+c[I-J+7]= = 3)/*if columna I Fila J está vacío */
{ a[j-1]= 0; b[I+j-2]= 0; c[I-j+7]= 0; */
putimage(h[i-1], l[j-1], flecha, COPY_PUT); /*Mostrar patrón de reina*/
Retraso (500); *Retraso*/
Si (i<8) intenta (I+1);
De lo contrario /*Generar un conjunto de soluciones*/
{ n[1 ]++; si (n[1]>\ ' 9 \ '){ n[0]++; n[1]= \ ' 0 \ ';}
Barra (260, 300, 390, 340); /*Mostrar la enésima solución*/
outtextxy(275, 300, n);
Retraso (3000);
p>
getch();
}
a[j-1]= 1; b[I+j-2]= 1; 1;
putimage(h[i-1], l[j-1], flecha, XOR _ PUT /* Elimina la reina y continúa encontrando el siguiente conjunto de soluciones*/); p>
Retraso(500);
}
}
int main(void)
{int gdrive=DETECT ,gmodo,código de error.
Tamaño int sin signo;
init graph(&g drive &gmode, "c:\\\\TC\\\\bgi");
p>
código de error = resultado del gráfico();
if (código de error!=grOk)
{printf("Error del gráfico\ \ n "); ;}
Rectángulo (50, 5, 100, 40);
Rectángulo (60, 25, 90, 33);
/*Dibuja una corona; */
Línea (60, 28, 90, 28); fila (60, 25, 55, 15);
Fila (55, 15, 68, 25); (68, 25, 68, 10);
Fila (68, 10, 75, 25); Fila (75, 25, 82, 10); 10, 82, 25); fila (82, 25, 95, 15);
fila (95, 15, 90, 25);
tamaño=tamañodeimagen(52, 7); , 98, 38); flecha=malloc(tamaño);
getimage(52, 7, 98, 38, flecha); /*Guardar la corona en el búfer*/
borrar ventana gráfica();
settextstyle(TRIPLEX_FONT,HORIZ_DIR,4);
setusercharsize(3,1,1,1);
setfillstyle(1, 4);
for(I = 0;i<=7;i++)a[I]= 1;
for(I = 0;i<=14 ;i++)b[ I]= 1;
for(I = 0;i<=23;i++)c[I]= 1;
for(I = 0 ;i<=8;i++) line(125,i*35+5,525,i*35+5);/*Dibujar un tablero de ajedrez*/
for(I = 0;i& lt=8;i++) line (125+i* 50, 5, 125+i*50, 285);
Prueba (1); /*Llamar a la función recursiva*/
Delay(3000);
closegraph();
Gratis(flecha);
}