Sunteți pe pagina 1din 5

#include <iostream>

int reynas[8][8];
int contador;

using namespace std; // Esto lo ponemos para escribir "cout" o "cin" en lugar de std::cout o
std::cin

/*

Esta funcin imprime un tablero 8x8 si encuentra una solucin*/

void ImprimirTablero(){
int i,j;

for(i=0; i<8;i++){
//cout << "---------------- \n";
for(j=0;j<8;j++)
cout << reynas[i][j] << "\t";
cout << "\n \n";
}

cout << "\n \n \n \n";

system("pause");
}

// Esta funcin checa si la nueva reyna ataca a las antes colocadas

int ChecarAtaque(int fila, int columna){


int i,j;

/*

Checar ataque en vertical*/

for(i=0; i<8; i++)


if(i!=fila)
if(reynas[i][columna] != 0)
return 1;

/*

Checar ataque primera diagonal (de superior izquiero a inferior derecho*/

if(fila<=columna){
i=0;
j=columna-fila;
}

if(fila>columna){
j=0;
i=fila-columna;
}

for(;i<8 && j<8; i++, j++)


if(i!=fila)
if(reynas[i][j]!=0)
return 1;

/*

Checar ataque segunda diagonal (de superior derecho a inferior izquierdo*/

if(fila>=7-columna){
j=7;
i=fila-(7-columna);
}

if(fila<7-columna){
i=0;
j=fila+columna;
}

for(;i<8 && j>=0; i++, j--)


if(i!=fila)
if(reynas[i][j]!=0)
return 1;

return 0;
}

void ColocarReyna(int fila, int columna){


int i;

//cout << ChecarAtaque(fila,columna) << "\n";


for(i=columna; i<8; i++){
reynas[fila][i]=contador;
contador++;

//

ImprimirTablero();

if(ChecarAtaque(fila,i) == 0)
if(fila<7)
ColocarReyna(fila + 1,0);

/*

if(ChecarAtaque(fila,i) == 1)
if(i<7){
reynas[fila][i]=0;
contador--;
ColocarReyna(fila,i + 1);
}*/
if(contador == 9 && ChecarAtaque(fila,i) == 0)
ImprimirTablero();

reynas[fila][i]=0;
contador--;
//cout << fila << "\t" << columna << "\n";
}

//ImprimirTablero();

//contador--;
//reynas[fila][columna]=0;
//cout << "fin \n";
}

int main(int argc, char** argv) {


int i,j;

contador=1;

cout << "Problema de las 8 reynas \n";

for(i=0;i<8;i++) //Inicializamos el tablero de ajedrez (escribimos cero pues no se ha


colocado nada
for(j=0;j<8;j++)
reynas[i][j]=0;

ColocarReyna(0,0);
recursividad

return 0;
}

//Colocamos la primera reyna en la primera posicin e inicia la

S-ar putea să vă placă și