用JAVA编写汉诺塔程序

来源:互联网 发布:网络语吃狗粮 编辑:程序博客网 时间:2024/06/07 09:40

汉诺塔问题:三根坚柱和一组中间有洞能在柱子上滑动的盘子,每个盘子有不同的直径。初始时,所有的盘子按照大小依次堆放在一个柱子上,最大的盘子在最下面。

目标:将所有的盘子从初始的第一根柱子移动到第三根柱子上,可以借用额外的第二根柱子作为临时存放盘子的地方,但是移动过程中必须遵守以下规则:

1.一次只能移动一个盘子

2.不能把大盘子压在小盘子上面

3.除去移动的瞬间,所有盘子必须在柱子上。

思想:递归。要将N个盘子移到目标柱子上:

(1)将N-1个盘子移动到额外的柱子上

(2)将最大的盘子移到目标柱子上

(3)将N-1个盘子从额外的柱子上移到目标柱子上

  1. package http;

  2. public class Tower {
  3. private int totalDisks;
  4. public Tower(int totalDisks){
  5. this.totalDisks=totalDisks;
  6. }
  7. public void solve(){
  8. moveTower(totalDisks,1,3,2);
  9. }
  10. private void moveTower(int numDisks,int start,int end,int temp){
  11. if (numDisks==1)
  12. moveOneDisk(start,end);
  13. else{
  14. moveTower(numDisks-1, start, temp, end);
  15. moveOneDisk(start,end);
  16. moveTower(numDisks-1,temp,end,start);
  17. }
  18. }
  19. private void moveOneDisk(int start,int end){
  20. System.out.println("将一个盘子从"+start+"移动到"+end);
  21. }
  22. }

  • import http.Tower;


  • public class SolveTower {


  • public static void main(String[] args) {
  • // TODO Auto-generated method stub
  • Tower towers=new Tower(4);
  • towers.solve();


  • }


  • }

1 0
原创粉丝点击