سلام
دوستان عزیز خواهشمندم هر کدامتان که برنامه و کد 8وزیر با پرولوگ را دارید ارسال نمایید. واقعا ممنون میشم.
سلام
دوستان عزیز خواهشمندم هر کدامتان که برنامه و کد 8وزیر با پرولوگ را دارید ارسال نمایید. واقعا ممنون میشم.
سلام دوست عزیز تو مورد هشت وزیر تو سایت بحث شده ولی فکر نکنم پرولوگ باشه ولی این لینک رو ببینید به دردتون میخوره به زبان VB.net است
https://barnamenevis.org/showthread.php?t=108490
اینم یه دونه 8 داشت من گذاشتم
https://barnamenevis.org/showthread.php?t=42897
سلام
این مسله تو کتاب the art of prolog
نویسنده:sterling وshapiro
فصل14 حل شده
search کنید ببینید ebook اش رو پیدا می کنید چون منم کتابش دارم
اگه پیدا نشد بگید من کد واستون تایپ کنم
سلام
از شما میخواهم که کد برنامه 8وزیر را که در کتابthe art of prolog است به بگذارید.
روش اول فرض می کنه که وزیر ها به صورت random رو صفحه قرار دارن و اونا رو مرتب می کنه
کدش اینه:
/* queens(N,Queens) :-
Queens is a placement that solves the N queens problem,
Represented as a permutation of the list of numbers [1,2,…,N]. */
queens(N,Qs) :- range(1,N,Ns), permutation(Ns,Qs), safe(Qs).
/* safe(Qs) :- the placement Qs is safe. */
safe([Q|Qs]) :- safe(Qs), not attack(Q,Qs).
safe([]).
attack(X,Xs) :- attack (X,1,Xs).
attack(X,N,[Y|Ys]) :- X is Y+N ; X is Y-N.
attack (X<N,[Y|Ys]) :- N1 is N+1, attack(X,N1,Ys).
permutation(Xs,[Z|Zs]) :- select(Z,Xs,Ys), permutation(Ys,Zs).
permutation([],[]).
select(X,[X|Xs],Xs).
select(X,[Y|Ys],[Y|Zs]) :- select(X,Ys,Zs).
range(M,N,[M|Ns]) :- M < N, M1 is M+1, range(M1,N,Ns).
range(N,N,[N]).
روش دوم هر مرحله یک وزیر به صفحه اضافه می کنه
کدش اینه:
queens(N,Qs) :- range(1,N,Ns), queens(Ns,[],Qs).
quees(UnplacedQs,SafeQs,Qs) :- select(Q,UnplacedQs,UnplacedQs1), not attack(Q,SafeQs),
queens(UnplacedQs1,[Q|SafeQs],Qs.
queens([],Qs,Qs).
range(M,N,[M|Ns]) :- M < N, M1 is M+1, range(M1,N,Ns).
range(N,N,[N]).
select(X,[X|Xs],Xs).
select(X,[Y|Ys],[Y|Zs]) :- select(X,Ys,Zs).
attack(X,Xs) :- attack (X,1,Xs).
attack(X,N,[Y|Ys]) :- X is Y+N ; X is Y-N.
attack (X<N,[Y|Ys]) :- N1 is N+1, attack(X,N1,Ys).
کد مسئله هشت وزیر
کد رو در یک فایل نوت پد با پسوند .pl ذخیره کنید و برای اجرا هم :solution([ ]).
solution([ p(X , Y) | Others]):-
solution( Others),
member(Y , [1,2,3,4,5,6,7,8]),
noattack(p(X,Y), Others).
noattack( _ , [ ]).
noattack(p(X,Y), [ p(X1,Y1) | Others]):-
Y =\= Y1 ,
Y1-Y =\= X1-X ,
Y1-Y =\= X-X1,
noattack(p(X , Y), Others).
% member
% member( I,[ I | _ ]).
% member( I,[ _ | Rest]):- member(I , Rest).
solution([p(1,Y1),p(2,Y2),p(3,Y3),p(4,Y4), p(5,Y5), p(6,Y6), p(7,Y7), p(8,Y8)]).
پینوشت: اگه ادیتور پرولوگ را نصب ندارید میتونید از ادیتور انلاین اش استفاده کنید.https://swish.swi-prolog.org/p/eightQueen.pl