C++ 奇怪的双色汉诺塔问题
答案:1 悬赏:20 手机版
解决时间 2021-04-13 08:18
- 提问者网友:火车头
- 2021-04-12 20:32
C++ 奇怪的双色汉诺塔问题
最佳答案
- 五星知识达人网友:神鬼未生
- 2021-04-12 20:59
这和普通的汉诺塔问题是相同的。为什么呢?
考察一个普通的汉诺塔问题,如果按照最少步骤移动(即没有无意义的移来移去):
普通的汉诺塔(把盘子1~k由source移动到target)问题分三个阶段
1.把盘子1~k-1由source(k上面)移动到assistant
2.把盘子k由source移动到target
3.把盘子1~k-1由assistant移动到target(k上面)
在这里我们把盘子1~k-1的移动看做一个整体进行移动
那么假设存在一个违反双色规则移动的盘子m-1,它放在了盘子m+1上,但是你让盘子m怎么办呢?在移动1~m+1这个层次并没有盘子m在m+1所在柱子之外的两个柱子间移动的步骤。
m-1放在m+3、m+5、m+7……之上也是不可能的,因为同样地,就拿m+3来说,在移动1~m+3这个层次没有盘子m+2在m+3所在柱子之外的两个柱子间移动的步骤。
所以这种违规必然是一个多余的操作,违规地移动之后,必须要移下来才能正常继续。
至于普通的汉诺塔问题如何解决,你大可搜到答案无需我讲了吧。
考察一个普通的汉诺塔问题,如果按照最少步骤移动(即没有无意义的移来移去):
普通的汉诺塔(把盘子1~k由source移动到target)问题分三个阶段
1.把盘子1~k-1由source(k上面)移动到assistant
2.把盘子k由source移动到target
3.把盘子1~k-1由assistant移动到target(k上面)
在这里我们把盘子1~k-1的移动看做一个整体进行移动
那么假设存在一个违反双色规则移动的盘子m-1,它放在了盘子m+1上,但是你让盘子m怎么办呢?在移动1~m+1这个层次并没有盘子m在m+1所在柱子之外的两个柱子间移动的步骤。
m-1放在m+3、m+5、m+7……之上也是不可能的,因为同样地,就拿m+3来说,在移动1~m+3这个层次没有盘子m+2在m+3所在柱子之外的两个柱子间移动的步骤。
所以这种违规必然是一个多余的操作,违规地移动之后,必须要移下来才能正常继续。
至于普通的汉诺塔问题如何解决,你大可搜到答案无需我讲了吧。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯