logo资料库

基于prolog的迷宫系统.doc

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
1.迷宫图 S0 S1 S2 S3 S4 S5 S6 S7 S8 S9 Sg 2.迷宫算符:上,下,右,左 3.迷宫状态空间图: S0 S1 右 下 右 S2 下 右 下 右 S4 S3 S5 S5 S7 上 下 右 下 右 左 S4 右 S7 S6 右 S9 S8 右 S6 S8 S2 右 右 上 下 S9 Sg S1 S3 Sg
优化树 S0 S1 右 下 右 S2 下 右 S4 右 S3 S5 S7 下 S6 右 S8 右 右 S9 Sg 4.规则:(S5,S4). (S5,S6). (S5,S8). (S5,S2) road(s0,s1). road(s1,s2).road(s1,s4).road(s1,s0). road(s2,s1).road(s2,s3).road(s2,s5). road(s4,s5.road(s4,s7).road(s4,s1). road(s3,s2). road(s5,s4).road(s5,s6).road(s5,s8).road(s5,s2). road(s7,s4). road(s6,s5).road(s6,s9). road(s8,sg).road(s8,s5). road(s9,s6). 5.OPEN 表和 CLOSE 表 OPEN 表 节点 S0 S1 S2 S4 父节点 0=无 1=S0 2=S1 2=S1
S3 S5 S7 S6 S8 S9 Sg 3=S2 3=S2 4=S4 6=S5 6=S5 8=S8 9=S8 CLOSE 表 编号 节点 11 10 9 8 7 6 5 4 3 2 1 0 Sg S9 S8 S6 S7 S5 S3 S4 S2 S1 S0 S0 父节点编 号 9 8 6 6 4 3 3 2 2 1 0 0=无 Mark 目标节 点 Sg Fail- 放失败 Fail-=Fail-() RES 求 S0->Sg 的节 点 S0 S1 S2 S5 S8 6.程序代码: DOMAINS state=symbol DATABASE-mydatabase open(state,integer) closed(integer,state,integer) res(state) mark(state) fail_ PREDICATES
solve search(state,state) result searching step4(integer,state) step56(integer,state) equal(state,state) repeat resulting(integer) rule(state,state) road(state,state) GOAL solve. CLAUSES solve:-search(s0,sg),result. search(Begin,End):-retractall(_,mydatabase), assert(closed(0,Begin,0)), assert(open(Begin,0)), assert(mark(End)),repeat,searching,!. result:-not(fail_), retract(closed(0,_,0)),closed(M,_,_), resulting(M),!. result:-beep,write("sorry don't find a road!"). searching:-open(State,Pointer), retract(open(State,Pointer)),closed(No,_,_),No2=No+1, asserta(closed(No2,State,Pointer)),!,step4(No2,State). searching:-assert(fail_). step4(_,State):-mark(End),equal(State,End). step4(No3,State):-step56(No3,State),!,fail. step56(No4,StateX):- rule(StateX,StateY), not(open(StateY,_)), not(closed(_,StateY,_)), assertz(open(StateY,No4)),fail. step56(_,_):-!. equal(X,X). repeat. repeat:-repeat. resulting(N):- closed(N,X,M),asserta(res(X)),resulting(M). resulting(_):-res(X),write(X),nl,fail. resulting(_):-!. rule(X,Y):-road(X,Y). road(s0,s1). road(s1,s2).road(s1,s4).road(s1,s0).
road(s2,s1).road(s2,s3).road(s2,s5). road(s4,s5.road(s4,s7).road(s4,s1). road(s3,s2). road(s5,s4).road(s5,s6).road(s5,s8).road(s5,s2). road(s7,s4). road(s6,s5).road(s6,s9). road(s8,sg).road(s8,s5). road(s9,s6). 7.抓图结果
分享到:
收藏