首页 > 编程 > Python > 正文

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

2019-11-06 09:02:54
字体:
来源:转载
供稿:网友

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

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

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表