matlab商人旅行问题,商人过河问题(n个)-Matlab

这篇博客探讨了n个商人和随从过河的问题,利用Matlab解决如何在保证安全的同时,使渡河次数最少。通过设置安全矩阵和递推算法,找到最佳过河策略,并给出了n=3和5时的示例结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

n个商人过河问题

Description

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

Explaination

先从一般的例子开始讨论,通过3名商人各带一名随从过河,一只小船只能容纳3个人,从此岸的角度确定安全矩阵。再递推,确定n名商人各带一名随从过河,一只小船只能容纳z个人的安全状态矩阵(0、1)的规律

然后分类讨论,设立判定条件,来讨论什么情况下不存在安全过河状态以及对安全矩阵的遍历,通过设定单元数组来储存渡河所有过程,以便于后续查找和判断

最后通过判断此岸商人、仆人是否都已经到达彼岸来选择出最少渡河次数,并输出一组结果;如果不存在安全到达的情况则输出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时,渡河的最少次数、此岸的商人数和仆人数变化如下:

k =

11

W =

5 5

5 3

5 4

5 1

5 2

2 2

3 3

0 3

0 4

0 2

0 3

0 0

Code

:对于不同情况的m、z只需要修改代码中的m、z即可。

% Matlab

clear;

home;

m=3; %商人、仆人数

z=3; %船上可载人数<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值