一个有趣的问题--蚂蚁和木棍的问题 2010-10-19

这两天在看算法基础方面的东西,发现一个有趣的题,

题目是这样的:

有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个 位置上各有一只蚂蚁。木杆很细,不能同时通过一只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。当任意两只蚂蚁碰头 时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。编写程序,求所有蚂蚁都离开木杆的最小时间和最大时间。

 

乍看一下发现,好像很复杂,每个蚂蚁都有自己的朝向,5只蚂蚁,一共所有的可能性事2^5=32种,想了一会儿,头小疼~,发现这个东西用程序实现也很难啊,怎么控制?~ 后来实在想不出,就去百度了一下,发现原来是自己的思路错了,这个问题的解法其实可以不算是算法,而是一种思想,一种理解方式,正确的理解是:“灵魂算法”,听着挺血乎~~其实意思很简单,不管其他的,当两只蚂蚁相遇的时候,此时我们可以认为它们是可以穿过对方的“灵魂”,碰面之后仍会坚持原来的方向行 走。(对我们来说题目中两只蚂蚁并没有什么不同之处,这是算法思想的关键)不懂可以小思考下~~应该能模拟一下场景。

如果按照这个思路来想,蚂蚁可以穿越对 方而行走,那么用时最长的就是行走路线最长的那只蚂蚁!

第一只:27-3=24/1=24(s)
第二只:27-7=20/1=20(s)
第三只:27-11=16/1=16(s)
第四只:17-0=10/1=17(s)
第五只:23-0=23/1=23(s)

最长时间为24s

这个问题不用计算就可以得到答案,所以有时候有的问题,应该换种思路去思考问题!

 

 

posted @ 2010-10-19 22:01  般若随风  阅读(531)  评论(0编辑  收藏  举报