码迷,mamicode.com
首页 > 编程语言 > 详细

汉诺塔问题java实现

时间:2018-10-15 14:39:11      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:关系   使用   int   pre   []   pac   java   第一步   nbsp   

问题描述

  三个柱子,起初有若干个按大小关系顺序安放的盘子,需要全部移动到另外一个柱子上。移动规则:在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

解题思路

  使用递归算法进行处理,实在理不清的话,可以按最简单的例子(3个盘子)自己模拟一下,设有n个盘子,A、B、C三个柱子,大概有3个步骤:

  (1)把A上的n-1个盘通过C移动到B。

  (2)把A上的最下面的盘移到C。

  (3)因为n-1个盘全在B上了,所以把B当做A重复以上步骤就好了。

代码实现

  代码如下:

package com.example.demo;

public class Hanoi {
    private static int a = 0;

    public static void move(int i,String sta,String mid,String end) {
        if(i>1) {
            //第一步,把A上的n-1个盘通过C移动到B
            move(i-1,sta,end,mid);
            //第二步,把A上的最下面的盘移到C
            System.out.println("move: " + i + " from " + sta + " to " + end);
            a++;
            //第三步,把B上的盘子通过A移到C
            move(i-1,mid,sta,end);
        }else {
            //如果只有一个盘子了,则跳出递归,直接移动即可
            System.out.println("move: " + i + " from " + sta + " to " + end);
            a++;
        }
    }
    
    public static void main(String[] args) {
        move(3, "A", "B", "C");
        System.out.println(a);
    }
}

  运行结果:

技术分享图片

 

汉诺塔问题java实现

标签:关系   使用   int   pre   []   pac   java   第一步   nbsp   

原文地址:https://www.cnblogs.com/hhhshct/p/9790302.html

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