分治算法汉诺塔问题

2020-04-13 135次浏览 已收录 2个评论

运用分支算法思想,不管有多少个盘,只看作最下面的一个盘和上面的所有盘,总共看作两个盘。

* 括号里的柱子参数不代表每根柱子的位置,
* 而是功能,比如第一个参数的柱子是存放原盘的,
* 第二个参数是辅助柱子,第三个参数是目标柱子

package 十大算法;

public class 分治算法汉诺塔问题 {
public static void main(String[] args) {
 han(3,'A','B','C');
}
public static void han(int num,char a,char b,char c) {
 //如果只有一个盘
 if(num==1) {
  System.out.println("第1个盘从 "+ a+"->"+c);		
 }
 else {
  //如果有num>=2的情况,总是可以看作是两个盘,
  //1、最下边是一个盘,2、上面的所有盘
  
 //1. 先把最上面的所有盘A->B,移动过程中会使用到c
  han(num-1,a,c,b);
  //2. 把最下边的盘A->C
  System.out.println("第"+num+"个盘从 "+a+"->"+c);
  //3.把B塔的所有盘从B->C,移动过程使用A 塔
  han(num-1,b,a,c);
 }
}
}

 


渣渣龙, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:分治算法汉诺塔问题
喜欢 (0)

您必须 登录 才能发表评论!

(2)个小伙伴在吐槽
  1. 最好再详细点
    笨鸟先飞2020-05-26 09:33
  2. 我也是小白以后多多交流
    沥青2020-05-26 09:58