汉诺塔问题
Posted ssdut_yrp
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汉诺塔问题相关的知识,希望对你有一定的参考价值。
对于上面把问题抽象出来的那段描述,对于n > 1的时候,又可以抽象(换成“总结”这个词会没那么大压力吗?)出这3步:
(1)、将底盘n以上的环(n-1个)移动到B
(2)、将底盘n从A移动到C
(3)、将B上的环(n-1个)移动到C
其中第1步和第3步的步数是一样的,因为环的数量一样(n-1个),只是目标的柱子不同而已。
public class TowerApp {
/**
* @param args
*/
static int nDisks=3;
public static void main(String[] args) {
// TODO Auto-generated method stub
doTowers(nDisks,‘A‘,‘B‘,‘C‘);
}
/**
* @param topN 要移动盘子的数目
* @param from 源塔座
* @param inter 中间塔座
* @param to 目标塔座
*/
public static void doTowers(int topN,char from,char inter,char to){
if(topN==1){
System.out.println("Disk1 from "+from+" to "+to);
}
else{
doTowers(topN-1,from,to,inter);
System.out.println("Disk"+topN+" from "+from+" to "+to);
doTowers(topN-1,inter,from,to);
}
}
}
以上是关于汉诺塔问题的主要内容,如果未能解决你的问题,请参考以下文章