2012年6月11日

用格雷码的方法解决汉诺塔问题

摘要: 说到汉诺塔问题,首先想到的是最经典的递归解法。今天看到求格雷码的方法,里面提到可以观察格雷码每一次改变的位数和汉诺塔每次移动的盘子的编号,从而产生一种不需要递归和堆栈的汉诺塔解法。 在生成格雷码的算法中,依次改变的位数是最低位和从右往左数第一个1所在位的左一位,对应汉诺塔的盘子就是最小的盘子和中间某个盘子。最小的盘子有两种可能的移动方案,其他的盘子只有一种可能。对于最小盘子移动到的柱子的解决方法是,根据观察,当盘子总数是奇数时,最小盘子的位置依次是“3->2->1->3->2->1...”;当总数是偶数时,这个顺序是“2->3->1->2-> 阅读全文

posted @ 2012-06-11 16:52 waruzhi 阅读(1734) 评论(0) 推荐(0) 编辑

导航