修道士过河问题

本文探讨了修道士与野人过河问题的解决方案,针对不同人数和船只容量(c)的情况进行了分析。当c=1,2,3时,给出了无解或部分解。对于c>3,当m=n时,通过两种方案详细说明了如何确保所有人员安全过河。而对于n>m的情况,分别考虑c为偶数和奇数时的不同策略。关键在于每次过河时保证修道士的安全并最大化过河人数。这是一个经典的逻辑与算法问题,适用于编程竞赛或逻辑思维训练。" 125987839,5110705,Java实现:光标定位到文本字段末尾,"['Java', '开发语言', 'GUI编程', '用户交互']
摘要由CSDN通过智能技术生成


设有m个野人,n个修道士,(m≤n)船上可坐c个人。
1. c=1,无解;
2. c=2,对较小的M,N有解,对于较大的M,N无解,比如m=n=4,c=2无解;
3. c=3,情况同上;
4. c>3,分情况讨论如下:
(1) m=n,
此时可以按照下面的方案设计(下面S表示野人savage,R表示修道士religious, B表示船boat, ||表示河)
方案一:

m S ||      (m-c)S || cS        (m-c+1) S  || (c-1) S      (m-c+1)S || (c-1)S       (m-c+2)S || (c-2)S
m R ||  =>     m R ||       =>        m R  ||          =>  (m-c+1)R || (c-1)R   =>  (m-c+2)R || (c-2)R
B   ||             ||  B                B  ||                       ||      B              B ||

于是又回到了开始时候的情况,两岸的S,R相等且船在左岸,已经有c-2个S和c-2个R过了河。依次做下去,最终所有的人都会过河;
还有一种方案:
方案二:
mS ||     (m-[c/2])S || [c/2]S       (m-[c/2]+1)S || ([c/2]-1)S
mR ||  =>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值