传教士野人过河问题——所有方法打印

这篇博客介绍了如何解决人工智能课程中的传教士与野人过河问题,采用了一种简单易懂的递归方法。作者首先定义了判断非法状态的条件,然后在递归函数中通过两层循环模拟不同载人情况,实现从左岸到右岸的所有可能路径。代码仅针对特定情况(3传教士,3野人,2艘船)进行了调试,并提到了对于任意人数的优化需求。
摘要由CSDN通过智能技术生成


作为人工智能上机课的第一题,上网看了许多算法,最后根据自己的理解写出了一种比较简单易懂的方法。下面为简单分析。


Ⅰ判断函数中判断为非法状态的情况

①任何一边船的数目不为0且不为1;

②任何一边野人或者传教士的人数小于0;

③任何一边传教士人数不为0且传教士人数小于野人人数;

④当前将要到达的状态在路程visit中出现过。


Ⅱ递归函数

这里的递归函数设置了三个形参:M,C,flag分别表示左岸传教士数、野人数和船数(受书上的提示的影响,即左岸初态为(3,3,1),终态为(0,0,0))。

对于左岸状态的变化我们知道有总共有十种可能,即:

两个野人从左岸到右岸,

两个传教士从左岸到右岸,

一个野人一个传教士从左岸到右岸,

一个野人从左岸到右岸,

一个传教士从左岸到右岸,

以及相反的五种情况。

这里博主设置了一个两层循环,以i表示本次船上载人数,j表示船上的传教士数,外层循环i从2到1(船上载0个人是没有意义的,i=0不予考虑),内层循环j从i到0。则可能情况如下所示(其中k表示船上的野人数,k = i-j):

i=2: j = 2,  k = 0

          j = 1,  k = 1

          j = 0,  k = 2 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值