首页 > 编程语言 >【程序员必会十大算法】之分治算法(汉诺塔问题)

【程序员必会十大算法】之分治算法(汉诺塔问题)

时间:2022-10-11 16:32:06浏览次数:64  
标签:个盘 问题 程序员 算法 num 汉诺塔 hanoiTower 移动


1.应用

分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题…直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),​​​二分查找​​,傅立叶变换(快速傅立叶变换),汉诺塔问题

2.汉诺塔问题

public static void main(String[] args) {
int[] arr = {1,1,2,2,33};
hanoiTower(3,'A','B','C');
}

public static void hanoiTower(int num,char a,char b,char c){
if (num == 1){
System.out.println("将第1个盘从"+ a +"移动到" + c);
}else {
//将上面的盘从a移动到c,移动过程中会经过b
hanoiTower(num - 1,a,c,b);

//将最下面的盘从a移动到c
System.out.println("将第"+ num +"个盘从" + a + "移动到" + c);

//将B塔的所有盘从b移动到c 移动过程会用到a
hanoiTower(num - 1,b,a,c);
}
}

结果

将第1个盘从A移动到C
将第2个盘从A移动到B
将第1个盘从C移动到B
将第3个盘从A移动到C
将第1个盘从B移动到A
将第2个盘从B移动到C
将第1个盘从A移动到C


标签:个盘,问题,程序员,算法,num,汉诺塔,hanoiTower,移动
From: https://blog.51cto.com/u_15824619/5746639

相关文章