Skip to content
This repository has been archived by the owner on Mar 14, 2020. It is now read-only.

luotianqi777/Merchants-across-the-river

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Chinese: 求解商人过河的问题
问题描述如下
三个商人各带一个随从乘船过河,一只小船只能容纳2人,由他们自己划船。
三个商人窃听到随从们密谋,在河的任意一岸上,只要随从的人数比商人多,就杀掉商人。
但是如何乘船渡河的决策权在商人手中,商人们如何安排渡河计划确保自身安全?
问题变量设计
设商人数量为x,仆人数量为y,船能容纳的最大人数为n
数学模型构成
记第k次过河前的商人数为xk,仆人数为yk,将其表示为二维的向量形式
S_k=(x_k,y_k )
将二维状态sk定义为状态,安全渡河条件下的状态集合称为允许状态集合,记作S。
S={(x,y)│█(x=0,y=0,1,2,…,x_max;x=x_max,y=0,1,2,…,y_max;@x≥y且n-x≥n-y)}
记第k次过河时船上的商人数为uk,仆人数为vk,将二维向量dk定义为决策。允许决策集合记作D,D的容量取决于n的大小
D={(u,v)│1≤u+v≤n,u=0,1,…,x_max;v=0,1,…,y_max }
可以得出状态sk随决策dk变化的规律是
S_(k+1)=k+〖(-1)〗^k d_k
上式称为状态转移律
由此问题转化为
求决策dk∈D,使状态sk∈S按照转移律,由初始状态s1=(x,y)经有限布n达到状态sn+1=(0,0)。
程序设计框架
//程序采用C++语言编写
设计Vector类用来表式向量
设计List类用来储存最终结果
核心算法采用递归实现暴力求解
应考虑回路的鉴别及处理

Releases

No releases published

Packages

No packages published

Languages