Ch13 DevideAndConque
Yang Haoran 4/2/2020 Algorithm
# DevideAndConque
汉诺塔问题:
- 如果只有一个盘,可以直接移动
- 如果不是一个盘,总归可以把它看成两个部分,第一部分1为最低下那个盘,第二部分2为剩下的盘
设共有柱子ABC,需要把A柱移动到C柱
- 先把2移动到B
- 再把1移动到C
- 再把2移动到C
public class Hanoitower {
public static void main(String[] args) {
Han(5, 'A' , 'B', 'C');
}
/**
*
* @param num: 要移动的数目
* @param a:第一个柱子
* @param b:第二个柱子
* @param c:第三个柱子
*/
public static void Han(int num, char a, char b, char c) {
if(num == 1) {
System.out.println(a + "=>" + c);
}
else {
//先把上面那部分移动到b
Han(num - 1, a, c, b);
//再把下面那部分移动到c
System.out.println(a + "=>" + c);
//再把剩下的从b移动到c
Han(num - 1,b,a,c);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28