汉诺塔问题

来源:互联网 发布:摄影作品网站 知乎 编辑:程序博客网 时间:2024/05/29 14:32

直接上程序:如下

public class Hanoi{static int i=1;public static void main(String[] args){hanoi(5,'A','B','C');}public static void move(int n,char from,char to) //将编号为n的盘子由from移动到to{System.out.printf("第%d步:将%d号盘子%c---->%c\n",i++,n,from,to);}public static void hanoi(int n,char from,char denpend_on,char to)//将n个盘子由初始塔移动到目标塔(利用借用塔){  if (n==1)  move(1,from,to);//只有一个盘子是直接将初塔上的盘子移动到目的地  else  {      hanoi(n-1,from,to,denpend_on);//先将初始塔的前n-1个盘子借助目的塔移动到借用塔上  move(n,from,to);              //将剩下的一个盘子移动到目的塔上  hanoi(n-1,denpend_on,from,to);//最后将借用塔上的n-1个盘子移动到目的塔上}}}
结果如下:

第1步:将1号盘子A---->C
第2步:将2号盘子A---->B
第3步:将1号盘子C---->B
第4步:将3号盘子A---->C
第5步:将1号盘子B---->A
第6步:将2号盘子B---->C
第7步:将1号盘子A---->C
第8步:将4号盘子A---->B
第9步:将1号盘子C---->B
第10步:将2号盘子C---->A
第11步:将1号盘子B---->A
第12步:将3号盘子C---->B
第13步:将1号盘子A---->C
第14步:将2号盘子A---->B
第15步:将1号盘子C---->B
第16步:将5号盘子A---->C
第17步:将1号盘子B---->A
第18步:将2号盘子B---->C
第19步:将1号盘子A---->C
第20步:将3号盘子B---->A
第21步:将1号盘子C---->B
第22步:将2号盘子C---->A
第23步:将1号盘子B---->A
第24步:将4号盘子B---->C
第25步:将1号盘子A---->C
第26步:将2号盘子A---->B
第27步:将1号盘子C---->B
第28步:将3号盘子A---->C
第29步:将1号盘子B---->A
第30步:将2号盘子B---->C
第31步:将1号盘子A---->C

0 0
原创粉丝点击