只贴代码跟样例输出:

move(1,0).%表示船上有一位牧师,没有野人。
move(0,1).
move(0,2).
move(2,0).
move(1,1).
legal((X,Y,_)):- %X为左岸状态,Y为右岸状态。
legal_temp(X), %分别判断两岸的状态是否合法。
legal_temp(Y).
legal_temp((X,Y)):- (X=:=0,Y>=0,!);(Y=:=0,X>=0,!);(X>=Y,X>=0,Y>=0). %牧师人数为0,野人的人数大于0/%野人人数为0,牧师的人数大于0/%牧师人数为0,野人的人数大于0,合法。
update((X,Y,Q),Move,Statu):-(A,B)=X, (C,D)=Y,(E,F)=Move,if_then_else(Q=:=0,(C1 is C+E, D1 is D+F, A1 is A-E, B1 is B-F, Statu=((A1,B1),(C1,D1),1)),  (C1 is C-E, D1 is D-F, A1 is A+E, B1 is B+F, Statu=((A1,B1),(C1,D1),0))).
valid(Statu,Statu1):- %两种状态互通且可走
move(X,Y),
update(Statu,(X,Y),Statu1),
legal(Statu1).
first_one(A,X):- append([A],_,X).         %A等于表X的第一个元素
last_part(A,X):- first_one(B,X),append([B],A,X).   %得到A等于表X的除第一个元素的后部分表
if_then_else(P,Q,R):- call(P),!,Q.
if_then_else(P,Q,R):- R.
show(L):-if_then_else((length(L,X),X>0),(first_one(A,L),last_part(B,L),write('['),write(A),write(']'),nl,show(B)),fail).
mcp(X,Y,L):- % L为储存的路由表。
if_then_else(X=Y,  (write('================'),nl,show(L),nl)  , (valid(X,Z), not(member(Z,L)),mcp(Z,Y,[Z|L]))  ).

运行结果:

?- mcp(((0,0),(3,3),1),((3,3),(0,0),0),[((0,0),(3,3),1)]).
================
[(3,3), (0,0),0]
[(2,2), (1,1),1]
[(3,2), (0,1),0]
[(3,0), (0,3),1]
[(3,1), (0,2),0]
[(1,1), (2,2),1]
[(2,2), (1,1),0]
[(0,2), (3,1),1]
[(0,3), (3,0),0]
[(0,1), (3,2),1]
[(0,2), (3,1),0]
[(0,0), (3,3),1]
================
[(3,3), (0,0),0]
[(3,1), (0,2),1]
[(3,2), (0,1),0]
[(3,0), (0,3),1]
[(3,1), (0,2),0]
[(1,1), (2,2),1]
[(2,2), (1,1),0]
[(0,2), (3,1),1]
[(0,3), (3,0),0]
[(0,1), (3,2),1]
[(0,2), (3,1),0]
[(0,0), (3,3),1]
================
[(3,3), (0,0),0]
[(2,2), (1,1),1]
[(3,2), (0,1),0]
[(3,0), (0,3),1]
[(3,1), (0,2),0]
[(1,1), (2,2),1]
[(2,2), (1,1),0]
[(0,2), (3,1),1]
[(0,3), (3,0),0]
[(0,1), (3,2),1]
[(1,1), (2,2),0]
[(0,0), (3,3),1]
================
[(3,3), (0,0),0]
[(3,1), (0,2),1]
[(3,2), (0,1),0]
[(3,0), (0,3),1]
[(3,1), (0,2),0]
[(1,1), (2,2),1]
[(2,2), (1,1),0]
[(0,2), (3,1),1]
[(0,3), (3,0),0]
[(0,1), (3,2),1]
[(1,1), (2,2),0]
[(0,0), (3,3),1]

prolog学习_修道士野人问题相关推荐

  1. 修道士野人问题的python求解

    修道士野人问题的python求解 问题描述 状态空间表示 程序设计 执行结果 源代码(Python3.5) github项目文件下载点这里~ 问题描述 修道士(Missionaries)和野人(Can ...

  2. JAVA野人_修道野人 用谓词表示法表示修道士和野人的问题 在河的左岸有三个修道士 联合开发网 - pudn.com...

    修道野人 所属分类:Java编程 开发工具:Java 文件大小:47KB 下载次数:74 上传日期:2004-11-22 12:41:37 上 传 者:xiaohui_82 说明:  用谓词表示法表示 ...

  3. 人工智能实践作业-修道士和野人过河问题

    人工智能实践作业-修道士和野人过河问题: 用编程语言编写和调试一个基于深度优先搜索法的解决"野人与传教士过河"问题的程序.目的是学会运用知识表示方法和搜索策略求解一些考验智力的简单 ...

  4. 1. A星算法解决修道士与野人问题

    A星算法解决修道士与野人问题 1. 运行环境 CPU:I5-10400 内存:16GB 系统:Win10 64位专业版,20H2 IDE:Vistual Studio 2019专业版 2. 问题描述 ...

  5. 修道士与野人问题——C++源代码,伪代码,详细分析

    前言:这一个经典的问题,可以把问题转换成数据结构中的 图 来解决.本博客节选自我去年7月份的数据结构报告 问题描述 假设有 n 个修道士和 n 个野人准备渡河,但只有一条能容纳 c 人的小船,为了防止 ...

  6. 修道士和野人java_修道士和野人问题

    休闲时刻看看神经网络方面的书,发现了修道士和野人的问题,不禁勾引起我写算法的欲望,曾经的三只大老虎三只小老虎过河问题.人狼羊白菜过河问题.汉诺塔.哈夫曼等等各种算法瞬间在脑海中约隐约现,修道士和野人问 ...

  7. 修道士和野人java_野人与修道士问题——详细分析与C++源代码

    前言:这一个经典的问题,可以把问题转换成数据结构中的 图 来解决.本博客节选自我去年7月份的数据结构报告 问题描述 假设有 n 个修道士和 n 个野人准备渡河,但只有一条能容纳 c 人的小船,为了防止 ...

  8. 用状态空间方法求解修道士与野人问题

    目录 一.状态空间表示法回顾 1.问题状态空间的构成 2.用状态空间表示问题的步骤 二.使用状态空间法求解修道士与野人问题 1.问题描述 2.状态空间求解步骤 总结 一.状态空间表示法回顾 状态空间表 ...

  9. 修道士和野人问题:所有解、启发求解、简单界面

    一.作业任务 修道士和野人问题:设有三个修道士和3个野人来到河边,打算用一条船从河的左岸渡到河的右岸去.但该船每次只能装载两个人,在任何岸边野人的数目都不得超过修道士的人数,否则修道士就会被野人吃掉. ...

最新文章

  1. GEMM性能提升200倍,AutoKernel算子优化工具正式开源
  2. ORACLE触发器具体解释
  3. 【Java】练习题:蒙眼过马路
  4. 腾讯云cloudlite认证_【腾讯云】考个证...大数据开发工程师认证
  5. python正则表达式入门_Python中的正则表达式教程
  6. 分享两个Mysql在线全备和binlog日志备份脚本
  7. 【机器学习入门到精通系列】元胞自动机和代码举例(这一篇就够了!)
  8. 极简图床 + 阿里云OSS 做图片外链
  9. grid - gap
  10. iPS细胞的最新应用
  11. 基于MSP432控制的红外循迹爬坡小车设计报告
  12. fcpx插件:Stupid Raisins Review Pop(37个流行评论标题插件)
  13. CCPC 2050 万人编程竞赛热身赛:1001 赶火车
  14. 破解android 九宫格锁
  15. Android 支持表情功能
  16. vue关于element日历calendar组件上月、今天、下月、日历块点击事件
  17. 2021安洵杯ezjson-wp
  18. hua图软件 mac_工具推荐--Mac下画图软件:Omnigraffle
  19. 停车场系统无法连接服务器,手动挡停车场 联机版无法连接服务器是什么原因...
  20. PyCharm安装教程及使用教程(2020最新版)

热门文章

  1. operator=、operator[]、operator()操作符重载
  2. 无锡计算机编程表演赛2021,“云动迎新春 欢乐满锡城” 无锡市2021新春全民健身线上运动会即将上线!...
  3. iPhone13首批售罄连夜补货,粉色款爆红,天猫3分钟售罄!
  4. 财务分析中的比率分析——安全性比率
  5. 【线性规划LP建模实例——化学工厂肥料】
  6. 拿了6家银行信息岗offer的一些经验
  7. HR:您好,您应聘的软件测试工程师岗位录取Offer会在三天之内发到您的邮箱。
  8. Redis分布式缓存、秒杀
  9. JavaScript的真值Truthy
  10. 路由器ACL(访问控制列表)的类型及配置