记住这个规律,以后玩汉诺塔基本上就是体力劳动了。
规律:
先小后大,单左双右,循环。
设3个柱子分别是甲,乙,丙,把3根柱子看成一个循环,也就是说,甲的右边是乙,乙的右边是丙,而丙的右边则回到甲,同理,甲的左边就是丙。简单点,记住丙的右边是甲,和甲的左边是丙就行了。
盘子分别是盘1,盘2,盘3,盘4……盘1最小。
按照“单左双右”的规律,先移动小的,也就是先移动盘1,再移动盘2,盘3,按顺序,把能移动的都移动一次,每次移动一步,如果不符合游戏规则,就移动两步,还是不符合的话,就找到盘1,重新按照“单左双右”的规则走,直到完成游戏。
例:3个盘子,单数,向左走。
1,盘1向左移动一步,到丙柱。
2,盘2向左移动一步,不符合游戏规则,移动两步,到乙柱。
3,盘3向左移动一步,不符合游戏规则,移动两步,不符合游戏规则。找到最小的盘1,向左移动一步,移动到乙柱。
4,盘2被盘1压住,无法移动。盘3向左移动一步,到丙柱。
5,找到最小的盘1,向左移动一步,到甲柱。
6,盘2向左移动一步,不符合游戏规则,移动两步,到丙柱。
7,盘3被盘2压住,无法移动。找到最小的盘1,向左移动一步,到丙柱。
游戏完成。
原文链接:http://blog.sina.com.cn/s/blog_68507b0a0100onrr.html
附:n层汉诺塔解法的Python源码
def move(n, a, b, c): if n ==1: print(a, '-->', c) return move(n-1, a, c, b) print(a, '-->', c) move(n-1, b, a, c) move(5, 'A', 'B', 'C')