分治算法Java实现
作者:互联网
分治算法
1、分治算法
1)分解:将原问题分解为若干个相互独立,与原问题形式相同的子问题;
2)解决:若子问题规模小容易解决则直接解,否则递归求解子问题;
3)合并:将各个子问题的解合并为原问题的解。
2、汉诺塔
1)基本内容:有A、B、C三根柱子,A柱子上从下向上依次摞着大小不同的盘子,要求大盘子必须在小盘子下面摞着;借助B柱子,把A柱子上的盘子移动到C柱子上,要求大盘子必须在小盘子下面摞着,且三根柱子间一次只能移动一个盘子。
2)主要思想
(1)若盘子数 n = 1,则直接从 A->C;
(2)若盘子数 n >= 2,
①先把前 n - 1个盘子从A->B,
②再把第 n 个盘子从 A->C,
③最后把前 n - 1个盘子从 B->C。
public void hanoiTower(int num, char a, char b, char c) {
if(num == 1) {
System.out.println("第1个盘子从" + a "->" + c);
}else {
hanoiTower(num - 1, a, c, b);// ①借助c盘子将num-1个盘子从c移动到b
System.out.println("第" + num + "个盘子从" + a + "->" + c);// ②
hanoiTower(num - 1, b, a, c);
}
}
标签:柱子,Java,分治,char,算法,num,盘子,hanoiTower 来源: https://blog.csdn.net/qq_40516377/article/details/113860176