prolog reinas
Publicado por cesar contreras (1 intervención) el 04/12/2008 17:11:59
Hola que tal aki solicitando ayuda para lograr poner un contador en este codigo que resuelve el problema de las N-reinas, si alguien me pudiera ayudar necesito que por cada ves que imprima una solucion diga el numero de esta ejemplo:
1S=[]
2S=[]
ojala alguien pueda ayudarme gracias
main :-
write('Introduce el número de reinas: '),read(T), reinas(T, Qs),
write(Qs),
nl, fail.
reinas(N,Qs) :-
rango(1,N,Ns), reinas(Ns,[],Qs).
reinas([],Qs,Qs).
reinas(UnplacedQs,SafeQs,Qs) :-
select(UnplacedQs,UnplacedQs1,Q),
no_atacada(SafeQs,Q),
reinas(UnplacedQs1,[Q|SafeQs],Qs).
no_atacada(Xs,X) :-
no_atacada(Xs,X,1).
no_atacada([],_,_) :- !.
no_atacada([Y|Ys],X,N) :-
X == Y+N, X == Y-N, %filas y diagonales distintas
N1 is N+1,
no_atacada(Ys,X,N1).
select([X|Xs],Xs,X).
select([Y|Ys],[Y|Zs],X) :-
select(Ys,Zs,X).
rango(N,N,[N]) :- !.
rango(M,N,[M|Ns]) :-
M < N,
M1 is M+1,
rango(M1,N,Ns).
1S=[]
2S=[]
ojala alguien pueda ayudarme gracias
main :-
write('Introduce el número de reinas: '),read(T), reinas(T, Qs),
write(Qs),
nl, fail.
reinas(N,Qs) :-
rango(1,N,Ns), reinas(Ns,[],Qs).
reinas([],Qs,Qs).
reinas(UnplacedQs,SafeQs,Qs) :-
select(UnplacedQs,UnplacedQs1,Q),
no_atacada(SafeQs,Q),
reinas(UnplacedQs1,[Q|SafeQs],Qs).
no_atacada(Xs,X) :-
no_atacada(Xs,X,1).
no_atacada([],_,_) :- !.
no_atacada([Y|Ys],X,N) :-
X == Y+N, X == Y-N, %filas y diagonales distintas
N1 is N+1,
no_atacada(Ys,X,N1).
select([X|Xs],Xs,X).
select([Y|Ys],[Y|Zs],X) :-
select(Ys,Zs,X).
rango(N,N,[N]) :- !.
rango(M,N,[M|Ns]) :-
M < N,
M1 is M+1,
rango(M1,N,Ns).
Valora esta pregunta


0