Zona HTML Zona Java Zona PHP Zona ASP Zona Bases de datos
Inicio > Foros > Prolog > necesito un programa en prolog
-Foros de debate

Prolog
Lista de foros | Lista de mensajes de este foro

Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.

necesito un programa en prolog
Enviado por lachy el día 12 de junio de 2006

Necesito un programa en prolog que me permita dar las posibles soluciones de un tablero con 8 reinas.

 
Re: necesito un programa en prolog
Enviado por RuMbOiDe el día 18 de junio de 2006

Mira, me voy a portar muy bien contigo. Aunque te lo de hecho te aconsejo ke te lo mires bien e intentes entenderlo. Disfrutalo. Salud.

%solucion(Pos), verdadero si las 8 reinas no se atacan
vector(Sol):- Sol = [c(1,_),c(2,_),c(3,_),c(4,_),c(5,_),c(6,_),c(7,_),c(8,_)],vector(Sol).

%solucion(L), L es una lista con las posiciones desde las que las reinas no pueden atacarse.
solucion([]).
solucion([c(X,Y)|Resto]):-solucion(Resto).
member(Y,[1,2,3,4,5,6,7,8]),not ataca(c(X,Y),Resto).

%ataca(c(X,Y),L),la reina en c(X,Y) ataca a alguna de las situadas en las posiciones de L.
ataca(c(_,Y),[c(_,Y1)|_]):-Y=:=Y1,!. %Misma Horizontal
ataca(c(X,Y),[c(X1,Y1)|_]):-Y1 is X1 + (Y-X),!. %La misma diagonal de pendiente 1
ataca(c(X,Y),[c(X1,Y1)|_]):-Y1 is (Y+X) - X1,!. %La misma diagonal de pendiente -1
ataca(c(X,Y),[c(_,_)|Resto]:-ataca(c(X,Y),Resto).%En cualquier otro caso

%muestra el tablero y la solucion
tablero(Sol):-vector(Sol),esc_cabecera,esc_tablero(Sol).

esc_cabecera:-nl,nl,nl,
tab(3),write('---------------------------------'),nl,
tab(3),write('! 1 ! 2 ! 3 ! 4 ! 5 ! 6 ! 7 ! 8 !'),nl,
tab(3),write('---------------------------------'),nl.

esc_tablero([]).
esc_tablero([c(N,R)|Resto]):-esc_fila(N,R),esc_tablero(Resto).

esc_fila(N,R):-tab(2),write(N),esc_casillas(R),nl,tab(3),write('-------------------------------'),nl.

esc_casillas(1):-write('! * ! ! ! ! ! ! ! !').
esc_casillas(2):-write('! ! * ! ! ! ! ! ! !').
esc_casillas(3):-write('! ! ! * ! ! ! ! ! !').
esc_casillas(4):-write('! ! ! ! * ! ! ! ! !').
esc_casillas(5):-write('! ! ! ! ! * ! ! ! !').
esc_casillas(6):-write('! ! ! ! ! ! * ! ! !').
esc_casillas(7):-write('! ! ! ! ! ! ! * ! !').
esc_casillas(8):-write('! ! ! ! ! ! ! ! * !').

 


Tienda
Patrocinados
 

Copyright © 1999-2006 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network