商人过河问题

•n商人n仆人船容量m问题求解(VC++6.0)
问题引入:
    三名商人各带一个随从乘船渡河。现此岸有一小船只能容纳两人,由他们自己划行。若在河的任一岸随从人数比商人多,他们就可能抢劫财物。不过如何乘船渡河的大权由商人们掌握。商人们怎样才能安全过河呢?
模型建立:

    此问题可视为一个多步决策问题,每一步就是一次渡河,每次渡河就是一次状态转移。
         用三维变量(x,y,z)表示状态:
   x ------商人数, y------随从数

              x,y的取值范围:{0,1,2,3}
   z ------船位置

              z的取值范围:{0,1}
   0始发岸,1对岸

   那么安全状态可表示为

               x=0,3,   y=0,1,2,3 或  x=1,2,  y=x 

过河的状态转移过程:

(3,3,0)

(3,2,0)

(3,1,0)

(2,2,0)

(3,0,0)

(0,3,0)

(0,2,0)

(1,1,0)

(0,1,0)

(3,2,1)

(3,1,1)

(2,2,1)

(3,0,1)

(0,3,1)

(0,2,1)

(1,1,1)

(0,1,1)

(0,0,1)


模型求解

这样问题要求由(3,3,1)变到(0,0,0)的一条道路。根据题意,状态转移时要满足一定的规则:
 1.     Z从0变为1与从1变为0交替进行;
 2.     当Z从0变为1时,即船从此岸到对岸,此岸人数减少1或2个;

              即(x,y,0)→(u,v,1)时,

                    u≤x, v≤y, u+v=x+y-1 oru+v=x+y-2
 3.     当Z从1变为0时,即船从对岸到此岸,此岸人数增加1或2个;
      即(x,y,1)→(u,v,0)时,

                   u≥x, v≥y,u+v=x+y+1 oru+v=x+y+2
 4.     不重复已出现过的状态,如

          (3,3,1)→(3,1,0)→(3,3,1);  

  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值