猴子过河
来源:互联网 发布:js json格式转base64 编辑:程序博客网 时间:2024/04/28 00:40
题目:有6个猴子AaBbCc要过一条河,河上面只有一条小船。
规则:(1)船上一次最多只能容纳两个猴子,船一开始在猴子这边的岸上。
(2) ABC是大猴,分别是abc三个小猴的家长,无论是在两边岸上或者船上,如果某个小猴和其他大猴在一起,而自己的家长不在,它就会被其他大猴干掉。
(3) 只有3个大猴ABC和小猴a会划船。
要给出一个全体猴子安全过河的方案。
这个题目我赴京面试前曾经在BBS上面见过,当时没有细看,以为简单,结果被问到这题的时候真是振腕叹息,只好白手起家仔细思考。首先考虑第一步,初次渡河的可行方案只有ab,Aa,Bb三种(认为BC和bc对等),很快可以发现前两种是死路,于是就有了下面的解答(_代表船):
1) AaBbCc_
2) AaCc _Bb
3) AaBCc_ b
4) ABC _abc
5) AaBC_ bc
6) Aa _BbCc
7) AaBb_ Cc
8) Bb _AaCc
9) BbCc_ Aa
10) bc _AaBC
11) abc_ ABC
12) b _AaBCc
13) ab_ ABCc
14) _AaBbCc
到了第6步的时候,我当时没敢往第7步上面想,因为以为7和2一样的,继续下去将是死路,于是疑惑了一把。后来面试官善意提示了一下,我才发现,不是对等的,因为船在不同的地方!!
于是走出7,再走出8,这时很明显了,8和7是关于河岸对称的,这回是真正的对称了!接下来只要将654321对称走一下,结果就出来了!
我觉得这个问题只要第四步两边状态为ABC和_abc,方案按照上面就可行。初次渡河的方案选择ab,ac,Bb,Cc,最终可过河。
以先ab 为例:
1) AaBbCc_
2) ABCc _ab
3) AaBCc_ b
4) ABC _abc
5) AaBC_ bc
6) Aa _BbCc
7) AaBb_ Cc
8) Bb _AaCc
9) BbCc_ Aa
10) bc _AaBC
11) abc_ ABC
12) b _AaBCc
13) ab_ ABCc
14) _AaBbCc