过桥问题

原创 2007年09月29日 14:57:00

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

更加一般性的假设N个人过桥,所需时间不同。对于最优方案,有几个结论:
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个旅行者的情形,从而递归解决之

A、B、C、D四人过桥

A、B、C、D四人过桥
  • tiegenZ
  • tiegenZ
  • 2017年04月14日 13:21
  • 420

四人过桥问题的解法

问题:晚上有四个人要过桥,只有一个手电筒,每次过桥都需要手电筒,每次最多可同时过两个人,其中甲过桥要1分钟,乙要2分钟,丙要5分钟,丁要10分钟。求最短的过桥时间。解答:甲乙先过,用时2分钟,然后甲把...
  • huochaihao
  • huochaihao
  • 2011年04月01日 13:38
  • 155

关于微软面试题:"四人过桥"问题的思考——“n人过桥”问题的演进(Java实现)

前段时间,在CSDN上无意中看到有人发表了一道微软面试题——“4人过桥”问题的算法,只是一直忙于手头上的工作,没有能够在短期实现。当时就是想,如果把这个问题用计算机语言实现的话,有些多此一举,即使我们...
  • fengyud
  • fengyud
  • 2009年10月09日 19:28
  • 4087

【算法面试题】:小明过桥问题

题意现在小明一家过一座桥,过桥时候是黑夜,所以必须有灯。现在小明过桥要1秒,小明的弟弟要3秒,小明的爸爸要6秒,小明的妈妈要8秒,小明的爷爷要12秒。每次此桥最多可过两人,而过桥的速度依过桥最慢者而定...
  • qq_23100787
  • qq_23100787
  • 2015年12月14日 12:40
  • 1886

算法题21 最快过桥问题

题目:4个人在晚上过一座小桥,过桥时必须要用到手电筒,只有一枚手电筒,每次最多只可以有两人通过, 4个人的过桥速度分别为1分钟、2分钟、5分钟、10分钟,试问最少需要多长时间4人才可以全部通过小桥? ...
  • wcyoot
  • wcyoot
  • 2011年05月17日 23:45
  • 4297

经典过桥问题的思路解析

一、问题   在漆黑的夜里,四位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,四个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。...
  • mig_davidli
  • mig_davidli
  • 2013年07月28日 11:11
  • 1355

微软过桥问题的C++实现

#include #include #include #include using namespace std;class Bridge_Crossing{public:  Bridge_Crossi...
  • yuziyu
  • yuziyu
  • 2008年02月29日 22:36
  • 339

算法之----过河/过桥问题

一.过桥问题 在漆黑的夜里,四位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,四个人一共只带了一只手电筒,而桥窄得只够让两个人同时通过。如...
  • nameix
  • nameix
  • 2016年07月24日 22:22
  • 1134

过桥问题 其实很水 就是很水

[提交][状态][讨论版] 题目描述 在一个月黑风高的夜晚,有一群人在河的右岸,想通过唯一的一根独木桥走到河的左岸.在伸手不见五指的黑夜里,过桥时必须借照灯光来照明,不幸的是,他们只有...
  • qq_32734731
  • qq_32734731
  • 2016年01月26日 23:24
  • 484

拿手电筒过桥问题

1、在漆黑的夜里,四位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,四个人一共只带了一只手电筒,而桥窄得只够让两个人同时通过。如果各自单独过桥的...
  • kai_wei_zhang
  • kai_wei_zhang
  • 2012年09月22日 14:19
  • 4686
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:过桥问题
举报原因:
原因补充:

(最多只允许输入30个字)