汉诺塔

来源:互联网 发布:d3.js demo 编辑:程序博客网 时间:2024/05/21 20:28
package com.someusefuldesign.demo;/*假设有A B C三个柱子移动的顺序为: * */public class Hanoi {         static int count = 0;      public void hanoi(int n,String from,String depend,String to ){       //这里的n是指每个柱子上盘子的编号,从上到下为1-n        if(n == 1){              move(from,to);          }else{              /**先把初始柱子的前n-1个盘子借助目标柱子移动到辅助柱子上**/              hanoi(n-1,from,to,depend);//把初始柱子上n-1个放到辅助柱子上            /**然后把初始柱子上最后一个最大的盘,放到目标柱子上*/              move(from,to);//这里只是打印出来信息            /**然后借助初始柱子(把初始柱子当成辅助柱子),把之前辅助柱子上的n-1个盘,放到目标柱子上*/              hanoi(n-1,depend,from,to);  //再把辅助上的放到目标柱子上            /**由于是递归,反复调用,知道n=1,到递归出口*/          }      }            public void move(String from,String to){          System.out.println("from " + from + " to " + to);          count++;      }        public static void main(String[] args) {          /**定义ABC三个柱子,A为初始柱子,B为辅助柱子,C为目标柱子*/          Hanoi hanoi=new Hanoi();        hanoi.hanoi(3, "A", "B", "C");          System.out.println("一共移动了"+count+"步");      }    }  

0 0
原创粉丝点击