汉诺塔问题java实现
Posted hhhshct
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汉诺塔问题java实现相关的知识,希望对你有一定的参考价值。
问题描述
三个柱子,起初有若干个按大小关系顺序安放的盘子,需要全部移动到另外一个柱子上。移动规则:在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
解题思路
使用递归算法进行处理,实在理不清的话,可以按最简单的例子(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实现的主要内容,如果未能解决你的问题,请参考以下文章