汉诺塔游戏规律,让汉诺塔沦为体力劳动!(后附汉诺塔解法Python源码)

来源:互联网 发布:数据库证书有哪些 编辑:程序博客网 时间:2024/05/29 07:49

记住这个规律,以后玩汉诺塔基本上就是体力劳动了。

规律:
先小后大,单左双右,循环。

设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')

1 0
原创粉丝点击