PDA

View Full Version : برنامه هشت وزیر با prolog



hamidlk
یک شنبه 16 تیر 1387, 11:33 صبح
سلام
دوستان عزیز خواهشمندم هر کدامتان که برنامه و کد 8وزیر با پرولوگ را دارید ارسال نمایید. واقعا ممنون میشم.

mehdad.koulab
یک شنبه 16 تیر 1387, 20:29 عصر
سلام دوست عزیز تو مورد هشت وزیر تو سایت بحث شده ولی فکر نکنم پرولوگ باشه ولی این لینک رو ببینید به دردتون میخوره به زبان VB.net است
http://barnamenevis.org/forum/showthread.php?t=108490
اینم یه دونه 8 داشت من گذاشتم
http://barnamenevis.org/forum/showthread.php?t=42897

star_n
چهارشنبه 19 تیر 1387, 00:01 صبح
سلام
این مسله تو کتاب the art of prolog
نویسنده:sterling وshapiro
فصل14 حل شده
search کنید ببینید ebook اش رو پیدا می کنید چون منم کتابش دارم
اگه پیدا نشد بگید من کد واستون تایپ کنم

roostayesabz
شنبه 26 مرداد 1387, 10:45 صبح
سلام
از شما میخواهم که کد برنامه 8وزیر را که در کتابthe art of prolog است به بگذارید.

star_n
شنبه 26 مرداد 1387, 22:10 عصر
روش اول فرض می کنه که وزیر ها به صورت 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]).

star_n
شنبه 26 مرداد 1387, 22:12 عصر
روش دوم هر مرحله یک وزیر به صفحه اضافه می کنه
کدش اینه:



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).

F_Rahimi
سه شنبه 08 بهمن 1398, 09:24 صبح
کد مسئله هشت وزیر


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).



کد رو در یک فایل نوت پد با پسوند .pl ذخیره کنید و برای اجرا هم :


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