码迷,mamicode.com
首页 > 其他好文 > 详细

汉诺塔问题

时间:2018-02-07 11:55:51      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:bsp   实现   har   style   中介   play   span   响应代码   inter   

问题描述

汉诺塔问题是由汉多放置在三个塔座上的盘子组成的一个古老的难题,如图1所示。

所有盘子的直径是不同的,并且盘子中央都有一个洞以使它们刚好可以放到塔座上。所有的盘子刚开始都放在塔座A上。这个难题的目标是将所有的盘子都从塔座A移动到塔座C上。每一次只可以移动一个盘子,并且任何一个盘子都不可以放在比自己小的盘子之上。

技术分享图片

              图 1   汉多塔

递归算法实现步骤

用子树的概念可以递归地表示出汉诺塔难题的解决办法。假设想要吧所有的盘子从原塔座上(称为S)移动到目标塔座上(称为D)。又一个可以使用的中介塔座(称为I)。假定在塔座S上有n个盘子。算法如下:

  1. 从塔座S移动包含上面的n-1个盘子的子树到塔座I上。
  2. 从塔座S移动剩余的盘子(最大的盘子)到塔座D上。
  3. 从塔座I移动子树到塔座D。

响应代码清单如下

 1 public class TowerApp {
 2 
 3     public static void main(String[] args) {
 4         int nDisks = 3;
 5         doTowers(nDisks, ‘A‘, ‘B‘, ‘C‘);
 6     }
 7 
 8     private static void doTowers(int topN, char from, char inter, char to) {
 9         if (topN == 1) {
10             System.out.println("Disk 1 from " + from + " to " + to);
11         } else {
12             doTowers(topN - 1, from, to, inter); // from -> inter
13             System.out.println("Disk " + topN + " from " + from + " to " + to);
14             doTowers(topN - 1, inter, from, to); // inter -> to
15         }
16     }
17 }

 

 

汉诺塔问题

标签:bsp   实现   har   style   中介   play   span   响应代码   inter   

原文地址:https://www.cnblogs.com/xinlichai0813/p/8425557.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!