经典算法问题:汉塔问题

汉塔问题

问题描述

有A,B,C 根柱子,在A上从上往下按照从小到大的顺序放着64个圆盘,以B为中介,把盘子全部移动到C上。
要求移动过程中,不能把大盘放在小盘上面

实现思想

递归:
为了实现第N个(最下面那个)盘从A到C的移动
1.首先要实现其上的N-1个盘移动到B
2.然后把第N个盘移动到C
3.再实现这N-1个盘从B移动回A。
4.此时问题退化为N-1个碟子从A移动到B的问题,以此类推。

所以首先构造一个用于递归调用的移盘方法:moveDish().

源代码(java)

import java.util.Scanner;

//汉塔问题求解
public class Hanta {
	//用于测试的main()方法
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int level = sc.nextInt(); //获取测试层数
		moveDish(level, 'A', 'B', 'C'); //调用方法
		
	}

	//用于递归调用的移动方法
	public static void moveDish(int level , char from , char medium , char to) {
		if(level == 1) {               //退出递归条件
			System.out.println("从"+from+"移动"+level+"号盘子到"+to);
		}else {              //递归调用
			moveDish(level-1 , from , to , medium);
			System.out.println("从"+from+"移动"+level+"号盘子到"+to);
			moveDish(level-1 , medium , to , from);
		}
		
	}
}

























    原文作者: 汉诺塔问题
    原文地址: https://blog.csdn.net/qq_41960416/article/details/88722915
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞