¿Cómo escribir un algoritmo para el problema de las ocho reinas usando estructuras de datos? ¿Cuántas formas hay?
#include lt;iostream.hgt;
#include lt;stdlib.hgt;
#define True 1
#define False 0
usando el espacio de nombres std;
int nQueen(int*a, int k, int n)
{
int i, j, conflicto;
if(kgt;=n) devuelve Verdadero;
for(i=0;ilt;n;i)
{
conflicto=Falso;
for(j=0;jlt;k;j)
{
si(i= =a[j]||(k-j)==(i-a[j])||(k-j)==(a[j]-1))
conflicto=Verdadero;
}
if(conflicto==Falso)
{
a[k]=i;
if(nReina( a, k 1, n)==Verdadero)
Devuelve Verdadero
}
}
devuelve Falso; >
}
void PrintSolution(int*a, int n)
{
int i, j;
char c=2;
char q=5;
coutlt;lt; "Coloca la reina en la siguiente posición:"lt;lt;endl;
for (i=0;ilt;n;i)
{
coutlt;lt;lt;"\t Fila"lt;lt;i 1lt;lt;lt;\columna "lt;lt;a[i] 1lt;lt;":\t\t ";
for(j=0;jlt;a[i];j)
coutlt;lt;c;
coutlt;lt; "Q";
for(j=a[i] 1;jlt;n;j)
coutlt;lt;c;
coutlt;lt;endl;
}
}
int main()
{
int n, *a;
coutlt;lt; "Ingrese n para determinar el tamaño del problema:" lt;lt;endl; p>
cingt; gt; n;
if(ngt; 0)
{
a=nuevo int[n];
}
else
{
coutlt;lt; ¡Entrada no válida!"lt;lt;endl;
system("pause");
return False;
}
if (nQueen(a, 0, n)==Verdadero)
{
PrintSolution(a, n);
}
else
coutlt;lt;
¡El problema no tiene solución! " lt; lt; endl;
eliminar(a);
sistema("pausa");
devolver 0;
}
Función no recursiva:
int nQueen(int *a, int n)
{
int top, i, j, conflict;
si(nlt;=0) devuelve Falso;
top=-1;
i=0;
hacer{< / p>
conflicto=Falso;
for(j=0;jlt.top 1;j)
if(i==a[j]||(arriba 1 -j)==(i-a[j])||(arriba 1-j)==(a[j]-1))
conflicto=Verdadero;
si ( conflicto==Falso)
{
a[ top]=i;
if(top==n-1) devuelve Verdadero;
i =0;
}
else
{
mientras(i==n-1amp;amp;topgt;=0 )
i=a [arriba--];
i;
}
}mientras(ilt; n); /p>
i p>
devuelve Falso;