您的位置:首页 > 编程语言 > Java开发

Java Hanoi塔问题简单分治算法实现

2015-06-26 12:47 627 查看

Java Hanoi塔问题简单分治算法实现

问题描述

输入:圆盘数n, 3根系杆——起始杆A、过渡杆B、目标杆C

输出:从起始杆到目标杆过程的最少步骤

算法思想

分治算法思想

如果A上只有一个盘,直接移动到C

如果A上有n个盘,将n-1个盘移动到B,再将A上的一个盘移动到C,随后再利用A将B上的n-1个盘移动到C(与原问题一直)

算法实现

public class Hanoi {
public static void hanoi(int number,char A,char B,char C){
if(number==1){
System.out.println(A+"->"+C);
return;
}
hanoi(number-1,A,C,B);
hanoi(1,A,B,C);
hanoi(number-1,B,A,C);
}

public static void main(String [] args){
hanoi(3,'A','B','C');
}
}


算法时间

n=1,T(n) = 1

n>1,T(n) = 2T(n-1) + 1

所以有:

T(n)=2n−1T(n) = 2^n-1

演示结果

A->C

A->B

C->B

A->C

B->A

B->C

A->C
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: