/**
* 汉诺塔:把 A 上的 n 个圆环(从上到下,依次增大)通过 B 挪到 C 上
* 核心思想
* 1.完成前的倒数第二大步, 第N(原始最底的)个圆盘在A上, n-1个圆环在B上排好,C为空;
* 把第N个圆盘从A上,挪到C上;在把n-1个圆盘从B通过A挪到C上;
* 2.在完成 1 描述的,假设第N个圆盘不存在;
* 第N-1(原始倒数第二底的)个圆盘在A上, n-2个圆环在B上排好,C为空;
* 把第N-1个圆盘从A上,挪到C上;在把n-1个圆盘从B通过A挪到C上;
* 3.迭代。
* 4.倒数第二大步后,A为空,B上n-1,C上 N;
* 把n-1从B上利用A挪到C上
* @author my
*
*/
public class HanoTower {
private int count =0;
public void hanNota(int n ,char from ,char dependOn, char to) {
if(n==1) {
move(1,from,to);
}else {
//先把n-1个圆环,从from 利用 to 挪到 dependOn
hanNota(n-1,from ,to, dependOn);
//把第N个圆环,从from移到to
move(n,from ,to);
//把n-1个圆环,从depend 利用 from 挪到 to
hanNota(n-1,dependOn,from,to);
}
}
private void move(int i, char from, char to) {
System.out.println("第"+count+++"步从 "+from+"------>"+to);
}
public static void main(String[] args) {
HanoTower ht = new HanoTower();
ht.hanNota(2, 'A','B', 'C');
}
}
汉诺塔
最新推荐文章于 2024-05-14 18:58:07 发布