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时,渡河的最少次数、此岸的商人数和仆人数变化如下: