图搜索问题求解实验报告Word下载.docx
- 文档编号:1095558
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:9
- 大小:130.95KB
图搜索问题求解实验报告Word下载.docx
《图搜索问题求解实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《图搜索问题求解实验报告Word下载.docx(9页珍藏版)》请在冰点文库上搜索。
设计性实验报告应含的主要内容:
一、设计要求
二、选择的方案
三、所用仪器、设备
六、结论(依据“设计要求”)
*封面左侧印痕处装订
1.熟悉PROLOG的运行环境,进行prolog的基本编程练习。
了解PROLOG语言中常量、变量的表示方法。
PROLOG的简单程序结构,掌握分析问题、询问解释技巧;
进行事实库、规则库的编写,并在此基础上进行简单的询问。
具体实验课上相关内容,练习例1到例6的内容。
2.图搜索问题求解。
任选以下实际应用题目:
爱因斯坦的超级问题、字谜问题、汉诺塔问题、八数码问题、八皇后问题、过河问题等,选两个。
要求实验报告中包括:
程序及其注释和说明、console表单中的程序运行结果。
PC机和trincprolog编译软件
PROLOG语言是一种以逻辑推理为基础的逻辑型程序设计语言,是一种陈述性语言而不是过程性语言。
PROLOG语言能够自动实现模式匹配和回溯、具备递归技术,而且语法简明,可以简化复杂问题求解。
1熟悉trincprolog开发环境,编写简单的prolog程序,学习prolog的语法,进行事实库、规则库的编写,并进行简单的询问。
2.按照所给题目选择汉诺塔与过河问题,熟悉其算法思想,编程并调试运行。
3.写实验报告
五、求解的问题与程序
求解问题:
汉诺塔问题
代码:
hanoi(N):
-
move(N,left,middle,right).
move(1,A,_,C):
inform(A,C),
!
.
move(N,A,B,C):
N1isN-1,
move(N1,A,C,B),
move(N1,B,A,C).
inform(Loc1,Loc2):
-nl,
write('
Moveadiskfrom'
-Loc1-'
to'
-Loc2).
传教士与野人
get_integer(L,H,X):
-L>
H,!
fail.
get_integer(L,H,L).
-L1isL+1,get_integer(L1,H,X).
append([],X,X).
append([A|X],Y,[A|Z]):
-append(X,Y,Z).
member(A,[A|X]).
member(A,[B|X]):
-member(A,X).
del_move:
retract(move(X,Y)),
fail.
del_move.
del_stat:
retract(inistatu(X)),
retract(desstatu(Y)),!
del_stat.
insert_move(N):
insert_move0(N),
insert_move1(N).
insert_move0(0).
insert_move0(N):
asserta(move(N,0)),
asserta(move(0,N)),
N1isN-1,
insert_move0(N1).
insert_move1(N):
get_integer(1,N,X),
get_integer(X,N,Y),
X+Y=<
N,
asserta(move(Y,X)),
insert_move1(_).
legal((X,Y,_)):
legal1(X),
legal1(Y).
legal1((X,Y)):
X=:
=0,Y>
=0,!
Y=:
=0,X>
X>
=Y,X>
=0.
update((X,Y,0),Move,Statu1):
(A,B)=X,
(C,D)=Y,
(E,F)=Move,
C1isC+E,
D1isD+F,
A1isA-E,
B1isB-F,
Statu1=((A1,B1),(C1,D1),1).
update((X,Y,1),Move,Statu1):
C1isC-E,
D1isD-F,
A1isA+E,
B1isB+F,
Statu1=((A1,B1),(C1,D1),0).
connect(Statu,Statu1):
move(X,Y),
update(Statu,(X,Y),Statu1),
legal(Statu1).
findroad(X,X,L,L).%递归的边界条件。
findroad(X,Y,L,L1):
-%L为储存的路由表。
connect(X,Z),
not(member(Z,L)),%X所连接的节点Z不在已经储存的路由表中。
findroad(Z,Y,[Z|L],L1).
insert_statu(N):
asserta(inistatu(((N,N),(0,0),0))),
asserta(desstatu(((0,0),(N,N),1))).
writelist([]).
writelist([X|L]):
write(X),
nl,
writelist(L).
widesolve(N,M):
del_move,
del_stat,
insert_move(M),
insert_statu(N),
inistatu(X),
desstatu(Y),
!
findroad(L,X,Y),
writelist(L),
nl.
deepsolve(N,M):
findroad(Y,X,[Y],L),
六、讨论与结论
传教士与野人问题中的顺序输出问题。
汉诺塔数据
结果输出
过河问题数据
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 搜索 问题 求解 实验 报告