• 有问题请联系QQ:2374146085
  • 有问题请联系QQ:2374146085

分治算法汉诺塔问题

3年前 (2020-04-13) 1479次浏览 已收录 0个评论

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

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

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)

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