Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo escribir un algoritmo para el problema de las ocho reinas usando estructuras de datos? ¿Cuántas formas hay?

¿Cómo escribir un algoritmo para el problema de las ocho reinas usando estructuras de datos? ¿Cuántas formas hay?

Estructura de datos

#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;

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;