• Domingo 18 de Agosto de 2019, 07:45

Autor Tema:  Re: el problema de las ocho reinas  (Leído 3069 veces)

eloir_ramsess

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: el problema de las ocho reinas
« en: Viernes 3 de Mayo de 2002, 00:42 »
0
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

dheak

  • Miembro activo
  • **
  • Mensajes: 62
    • Ver Perfil
el problema de las ocho reinas
« Respuesta #1 en: Viernes 3 de Mayo de 2002, 19:36 »
0
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