过桥问题

来源:互联网 发布:兄弟7060扫描软件 编辑:程序博客网 时间:2024/04/20 03:43

问题:在漆黑的夜里,四位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,四个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,四人所需要的时间分别是1、2、5、8分钟;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。问题是,如何设计一个方案,让这四人尽快过桥。

更加一般性的假设N个人过桥,所需时间不同。对于最优方案,有几个结论:
结论的得出过程: -COLOR: #ffcc99">http://oursci.org/magazine/200204/020411-04.htm
1.在这个方案里,每当出现手电筒在此岸的局面时,速度最快的那个人总是在此岸
2.所有从此岸到彼岸的移动都需两个人
3.每次从此岸到彼岸移动两人,要么这两人里有一个是所有人中最快的那个,要么这两人到达彼岸后都再也不回来
4.所有从彼岸到此岸的移动中,回来的这个人一定是当时在彼岸所有人中速度最快的,而且他只能是所有人中最快的或者次快的。换句话说,所有返回此岸的任务都可以只由跑得最快和跑得次快的人来担当,所有其他人一旦到达彼岸,就留在那里,再也不回来
如果给定N个(速度不同)的旅行者,假设A、B为走得最快和次快的旅行者,过桥所需时间分别为a、b;而Z、Y为走得最慢和次慢的旅行者,过桥所需时间分别为z、y。

两种模式:
由a护送 y z过桥       z + a + y + a
a和b 过桥,然后分别返回: b + a + z + b

所以,
    当2b>a+y时,应该使用模式一;
    当2b<a+y时,应该使用模式二;
    当2b=a+y时,使用模式一或二都可以。


上面的讨论都是在N≥4时进行的,那时最快、次快、最慢和次慢是四个不同的人。
N=1、2是不用动脑子的,直接通通过桥就是了
N=3,用穷举法可以发现由最快的人往返一次把其他两人送过河是最快的方法。
如果N≥4,设A、B为走得最快和次快的旅行者,过桥所需时间分别为a、b;而Z、Y为走得最慢和次慢的旅行者,过桥所需时间分别为z、y。那么
    当2b>a+y时,使用模式一将Z和Y移动过桥;
    当2b<a+y时,使用模式二将Z和Y移动过桥;
    当2b=a+y时,使用模式一将Z和Y移动过桥。
这样就使问题转变为N-2个旅行者的情形,从而递归解决之
原创粉丝点击