商人过河问题(n个)-Matlab

n个商人过河问题

Description

        商人过河问题:n名商人各带一名随从过河,一只小船只能容纳z个人,随从们约定,只要在河的任何一岸,一旦随从人数多于商人人数就杀人越货,但是商人们知道了他们的约定,并且如何过河的大权掌握在商人们手中,商人们该采取怎样的策略才能安全过河并且渡河次数最少呢??

Explaination

  1. 先从一般的例子开始讨论,通过3名商人各带一名随从过河,一只小船只能容纳3个人,从此岸的角度确定安全矩阵。再递推,确定n名商人各带一名随从过河,一只小船只能容纳z个人的安全状态矩阵(0、1)的规律
  2. 然后分类讨论,设立判定条件,来讨论什么情况下不存在安全过河状态以及对安全矩阵的遍历,通过设定单元数组来储存渡河所有过程,以便于后续查找和判断
  3. 最后通过判断此岸商人、仆人是否都已经到达彼岸来选择出最少渡河次数,并输出一组结果;如果不存在安全到达的情况则输出No answer!

 

Example

 

  • 当n=3,z=3时,渡河的最少次数、此岸的商人数和仆人数变化如下:
  • k =
    
         5
    
    W =
    
         3     3
         3     1
         3     2
         0     2
         0     3
         0     0

 

  • 当n=5,z=3时,渡河的最少次数、此岸的商人数和仆人数变化如下:
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值