现在的位置: 首页 > 综合 > 正文

每日一题:过桥问题

2011年08月31日 ⁄ 综合 ⁄ 共 1038字 ⁄ 字号 评论关闭

每日一题:过桥问题


问题描述:

今天偶然在《读者》上看到了益智问题 ,试着解了一下,感觉还是很有意思,google了一下,晚上都说是微软面试题,但是我找了找,在《How to Slove it》这本书中就有提到。不知道是谁cp的谁的。好吧,说说问题:U2合唱团在17分钟内得赶到演唱会,途中必须经过一座桥,4个人从桥的同一端出发,你得帮助他们到达另外的一段,天色已经暗下来,但是他们手中仅有一个手电筒,自此最多只能有两个人过桥,而过桥的时候必须持有手电筒,所以就得有人把手电筒带来带去。手电筒是不能通过丢的方式来传递的,4个人的步行速度是各不相同的,两个人的过桥时间需要以比较慢的那个人为准。四个人A,B,C,D所需的时间分别是1 2 5 10分钟。那么怎样在177分钟之内过桥?


思路:

开始的思路是使用“贪心”的策略。每次在桥的一边选择两个所需时间最短的两个人过桥,在桥的对面每次选择一个过桥时间最短的人来送回手电筒,但是这样得到的时间确实19分钟。ok,现在想想在上面的“贪心”的思路中,那里耗费了比较长的时间。显然,在最后一步A和D一起过桥,这里用时10分钟,但是A和D的速度相差太大,那如果让C和D一起过桥,会不会把总的过桥时间降下来。按照这个思路得到如下的解:

1和2首先过桥,用时2分钟,谈后1送过来手电筒,用时1分钟,然后5和10过桥,用时10分钟,然后2送过来手电筒,用时2分钟,然后1和2一起过桥,用时2分钟,总计用时2+1+10+2+2=17分钟。

继续往下,这个问题是否能够转换成某种模型去解决。ok,思路是这样的:构造这样一个图G,G中的每个节点表示已经过了桥的人的集合。G中的边表示的是
时间就作为有向边的权值。

这个问题如果用图论来建模的话,就可以以4个人在桥两端的状态来作为节点来构造一个有向图,如下图所示,以已经过桥了的人的状态作为图的节点,初始时没有人过桥,所以以空表示,第一轮有两个人过桥,有6种可能的组合,(1,2)(1,5)(1,10)(2,5)(2,10)(5,10),从空的状态转换到这些状态的需要的时间分别为2,5,10,5,10,10分钟,时间就作为有向边的权值。当有两个人过桥后,需要一个人拿手电筒回去接其他人,这时有四种可能的情况,分别是1,2,5,10中的一人留在了河的对岸,(1,2)这种状态只能转换到(1)(2)两种状态,对应的边的权值分别为2,1分钟,(1, 2)转换到(1)时也就是2返回了,返回需要耗时2分钟,以此类推可以建立以下的图论模型。




抱歉!评论已关闭.