汉罗塔问题:有三座塔A、B、C,A上有64个盘子,盘子大小不等,大的在下,小的在上。现在要把这64个盘子从A移到C,
但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B塔。
要求代码实现输入层数,输出每步是如何移动的。
(解决这个问题最好的办法就是运用递归(递推和回归),递推:把复杂问题推到比原问题简单一些再求解;回归:在获得简单情况的解以后,逐级返回,依次获得复杂问题的解)。
详细代码:
import java.util.*;
/**使用递归求解汉诺塔问题
**/
//递归算法
/*当n=1时,将A上的盘子直接移动到C上
*当n>=2时:
*1,将A上n-1个盘子移动到B上,以C为辅助塔(此步骤的解决办法与移动n阶盘子的方法完全一样
* 只是问题的规模减小1阶)
*2,将A上的一个盘子移动到C
*3,将B上的n-1个盘子移动到C,以A为辅助塔。
* */
public class Test5_1 {
public static void moveDish(int n,char from,char mid ,char to){
if(n==1){
System.out.println("从"+from+"移动盘"+n+"号到"+to);
}else{
moveDish(n-1,from,to,mid);
System.out.println("从"+from+"移动盘"+n+"号到"+to);
moveDish(n-1,mid,from,to);
}
}
public static void main(String[] args) {
本内容试读结束,登录后可阅读更多
下载后可阅读完整内容,剩余3页未读,立即下载