A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 丶小天 中级黑马   /  2014-2-24 15:38  /  652 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package com.wy.test;


  2.         /*
  3.         汉诺塔问题描述:
  4.         假设有三个命名为X(TOWER 1),Y(TOWER 2),Z(TOWER 3)的塔座,
  5.         在塔座X上有n个直径大小各不相同,依次从小到大编号为1,2,3,...,n的圆盘。
  6.         现要求将X塔座上的n个圆盘移到Z塔座上并按同样顺序叠排,
  7.         圆盘移动时必须遵循下列规则:
  8.         1)每次只能移动一个圆盘;
  9.         2)圆盘可以插在X,Y,Z中的任意塔座上;
  10.         3)任何时刻都不能将一个较大的圆盘压在较小的圆盘之上。
  11.         */

  12.         /*
  13.         解决思路:
  14.         我们先考虑最简单的情况,假如只有一个盘子,就直接从origin搬到目的地to。
  15.         如果两个盘子则是先把小盘子放assist,然后大盘子放to,最后再把assist里的盘子放destination。
  16.         假如有N个盘子时,我们可以这样想,底下最大的那个我们先不管(因为最大的如果你把它放那不动,
  17.         则可以无视它的,其他盘子可以在三个柱子上移来移去,它是最大嘛)。
  18.         于是我们可以先想办法把origin上的N-1个盘子搬到assist上,然后把最大的那个搬destination上,
  19.         最后再想办法把assist上的N-1个搬到destination上。于是当有盘子3个时,
  20.         先把上面2个搬到assist上,再把最大那个搬到destination,最后再想办法把assist上的2个搬destination上来。
  21.         */


  22. public class Hanoi {
  23.         /**
  24.          * @param n
  25.          * 盘子的数目
  26.          * @param origin
  27.          * 源座
  28.          * @param assist
  29.          * 辅助座
  30.          * @param destination
  31.          * 目的座
  32.          */
  33.         public void hanoi(int n,char origin,char assist,char destination) {
  34.                 if (n == 1) {
  35.                         move(origin,destination);
  36.                 } else {
  37.                         hanoi(n - 1,origin,destination,assist);
  38.                         move(origin,destination);
  39.                         hanoi(n - 1,assist,origin,destination);
  40.                 }
  41.         }
  42.        
  43.         // Print the route of the movement
  44.         private void move(char origin,char destination) {
  45.                 System.out.println("Direction:" + origin + "--->" + destination);
  46.         }
  47.         public static void main(String[] args) {
  48.                 Hanoi hanoi = new Hanoi();
  49.                 hanoi.hanoi(10,'A','B','C');
  50.         }
  51. }
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马