SoloCodigo

Programación General => Pascal => Mensaje iniciado por: eloir_ramsess en Viernes 3 de Mayo de 2002, 00:42

Título: Re: el problema de las ocho reinas
Publicado por: eloir_ramsess en Viernes 3 de Mayo de 2002, 00:42
necesito el codigo para resolver el problema de las ocho reinas acomodadas en un tablero de ajedrez de tal forma que ninguna a taque a otra, utilizando recursividad
Título: el problema de las ocho reinas
Publicado por: dheak en Viernes 3 de Mayo de 2002, 19:36
Hola! Eh, la verdad es que no tengo ni puta idea de pascal (o mas bien poca), pero tengo el problema resuelto en pseudocodigo, lo cual no te sera muy dificil de pasar a Pascal, C o cualquier otro lenguaje.

proc OchoReinas (y:entero, var t:tabla(1...8,1...8):entero)
var i:entero fin var
inicio
si y <= 8 entonces
   para i (1...8)
      si t(i,y)=0 entonces
         t(i,y) = y+10
         marcar(i,y,t)
         OchoReinas(y+1,t)
         desmarcar(i,y,t)
         fin si
   fin para
sino
   "Solucion encontrada"
fin si
fin inicio

proc desmarcar(x:entero,y:entero,var t:tabla(1...8,1...8):entero)
var i:entero, j:entero fin var
inicio
para i (1...8)
   para j (1...8)
      si t(i,j) = y entonces
         t(i,j) = 0
      fin si
   fin para
fin para
t(x,y) = 0
fin inicio

proc marcar(x:entero,y:entero,var t:tabla(1...8,1...8):entero)
var i:entero fin var
inicio
para i (1...8)
   si t(i,y) = 0 entonces
      t(i,y)=y
   fin si
   si t(x,i) = 0 entonces
      t(x,i) = y
      si t(x-i,y+i)=0 entonces
         t(x-i,y-i)=y
      fin si
   fin si
   si (x-i >= 1) ^ (y+1 <= 8) entonces
      si t(x-i,y+i)=0 entonces
         t(x-i,y+i)=y
      fin si
   fin si
   si (x+i <= 8) ^ ((y-i) >= 1) entonces
      si t(x+i,y-i)=0 entonces
         t(x+i,y-i)=y
      fin si
   fin si
   si (x+i <= 8) ^ (y+i <= 8) entonces
      si t(x+i,y+i)= 0 entonces
         t(x+i,y+i) = y
      fin si
   fin si
fin para
fin inicio

Espero que este codigo te sirva, si no te funciona bien, dimelo y te lo revisare (el var delante de las variables significa que estan pasadas por referencia).

Saludos