Java实现汉诺塔 -- JAVA 算法学习
2017-08-17 15:02
337 查看
[align=left][/align]
[align=left]呐 下图这个就是汉诺塔啦~小时候可是经常玩呢,大家都知道它的解决规则与步骤啦~那怎嚰用用代码来描绘一下呢~[/align]
[align=left]分析:规则很简单,我们发现当只有一层时,我们直接可以把所有(一个)的小环移到目标柱子上,当大于2时,我们发现,我们必须先把上面的N-1层移到辅助的柱子(目标柱子以外的两个都是辅助柱子)上,才能把第N层的小环移到目标柱子,是不是发现啦~我们只需要写一个递归函数,每次把第N-1上的所有环移到辅助的柱子,这样就可以一层一层的把小环从大到小移到目标柱子了呢~~~[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
publicclassHanoiTest
{
[align=left] privatestaticintcount=0;[/align]
[align=left] publicvoidhanoi(intn,charx,chary,charz){[/align]
[align=left] if(n==1)[/align]
[align=left] move(1,x,z);[/align]
[align=left] else{[/align]
[align=left] hanoi(n-1,x,z,y);[/align]
[align=left] move(n,x,y);[/align]
hanoi(n-1,y,z,
dd97
x);
[align=left] }[/align]
[align=left] }[/align]
[align=left] publicvoidmove(intn,chara,charb){[/align]
[align=left] count++;[/align]
[align=left] System.out.println("第"+count+"步:"+"将"+n+"从"+a+"移到"+b);[/align]
[align=left] }[/align]
publicstaticvoidmain(String[]args)
{
[align=left] System.out.println("请输入汉诺塔的高度:");[/align]
[align=left] Scannerscanner=newScanner(System.in);[/align]
[align=left] intn=scanner.nextInt();[/align]
/*int[]
hanoi1 = newint
,hanoi2 = newint
,hanoi3 = newint
;
[align=left] for(inti=0;i<n;i++){[/align]
[align=left] hanoi1[i]=i+1;[/align]
[align=left] hanoi2[i]=0;[/align]
[align=left] hanoi3[i]=0;[/align]
[align=left] }*/[/align]
[align=left] HanoiTesthanoiTest=newHanoiTest();[/align]
[align=left] hanoiTest.hanoi(n,'x','y','z');[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left]呐 下图这个就是汉诺塔啦~小时候可是经常玩呢,大家都知道它的解决规则与步骤啦~那怎嚰用用代码来描绘一下呢~[/align]
[align=left]分析:规则很简单,我们发现当只有一层时,我们直接可以把所有(一个)的小环移到目标柱子上,当大于2时,我们发现,我们必须先把上面的N-1层移到辅助的柱子(目标柱子以外的两个都是辅助柱子)上,才能把第N层的小环移到目标柱子,是不是发现啦~我们只需要写一个递归函数,每次把第N-1上的所有环移到辅助的柱子,这样就可以一层一层的把小环从大到小移到目标柱子了呢~~~[/align]
[align=left][/align]
[align=left][/align]
[align=left][/align]
publicclassHanoiTest
{
[align=left] privatestaticintcount=0;[/align]
[align=left] publicvoidhanoi(intn,charx,chary,charz){[/align]
[align=left] if(n==1)[/align]
[align=left] move(1,x,z);[/align]
[align=left] else{[/align]
[align=left] hanoi(n-1,x,z,y);[/align]
[align=left] move(n,x,y);[/align]
hanoi(n-1,y,z,
dd97
x);
[align=left] }[/align]
[align=left] }[/align]
[align=left] publicvoidmove(intn,chara,charb){[/align]
[align=left] count++;[/align]
[align=left] System.out.println("第"+count+"步:"+"将"+n+"从"+a+"移到"+b);[/align]
[align=left] }[/align]
publicstaticvoidmain(String[]args)
{
[align=left] System.out.println("请输入汉诺塔的高度:");[/align]
[align=left] Scannerscanner=newScanner(System.in);[/align]
[align=left] intn=scanner.nextInt();[/align]
/*int[]
hanoi1 = newint
,hanoi2 = newint
,hanoi3 = newint
;
[align=left] for(inti=0;i<n;i++){[/align]
[align=left] hanoi1[i]=i+1;[/align]
[align=left] hanoi2[i]=0;[/align]
[align=left] hanoi3[i]=0;[/align]
[align=left] }*/[/align]
[align=left] HanoiTesthanoiTest=newHanoiTest();[/align]
[align=left] hanoiTest.hanoi(n,'x','y','z');[/align]
[align=left] }[/align]
[align=left]}[/align]
相关文章推荐
- 算法学习之最大子序列算法(java实现)
- 常见算法学习及其Java实现--插入排序算法
- 一步步学习数据结构和算法之直接插入排序效率分析及java实现
- 一步步学习数据结构和算法之快速排序效率分析及java实现
- 一步步学习数据结构和算法之归并排序效率分析及java实现
- 算法学习之堆排序(java实现)
- 怎样用Java实现网桥自学习算法啊??
- 汉诺塔问题的算法分析与实现(Java)
- 从零开始学习算法(Java实现)~~~~之字符串篇~~~判断两个字符串是否是颠倒字母顺序构成的
- 一步步学习数据结构和算法之冒泡排序效率分析及java实现
- 算法学习(Java实现之字符串篇)····二进制求和
- 链栈实现算法 - Java 学习笔记(26)
- 感知机学习算法的原始形式的java简单实现
- 一步步学习数据结构和算法之堆排序效率分析及java实现
- 算法学习——LSC最大公有子序列 java实现
- 【数据结构与算法】汉诺塔算法——java递归实现
- 算法学习之排序学习之基数排序,计数排序及java实现
- 一步步学习数据结构和算法之选择排序效率分析及java实现
- 【Fiay】【Java】汉诺塔算法 递归实现
- 一步步学习数据结构和算法之快速排序效率分析及java实现