分治算法汉诺塔问题

首页 » 算法 » 分治算法汉诺塔问题

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

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

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);
 }
}
}

 

分享到:
赞(0) 打赏

评论 2

评论前必须登录!

 

  1. #1

    最好再详细点

    笨鸟先飞5个月前 (05-26)
  2. #2

    我也是小白以后多多交流

    沥青5个月前 (05-26)

觉得文章有用就打赏一下弟弟吧

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.5主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
正在播放:

作者想对您说:

累了就停下来听首歌吧

听完后会给您一个好心情

最后

等到您不容易

还希望您能多待一会儿

      00:00/00:00