用分治算法解决汉诺塔问题
时间:2020-09-18 00:23:00
收藏:0
阅读:43
分治算法的介绍
基本思想:分而治之(Divide and conquer)
模式:
- 设置一个阈值N0
- 当问题规模p小于N0时,采用基本子算法
- 当规模大于N0时,将问题分解再合并
汉诺塔问题
思路:
- 当片数n=1时:将一片从A移动到C
- 当片数n>=2时:
- 将所有片看作两部分,最下面一片为单独一部分,
- 上面一部分从A移动到B,下面一部分从A移动到C
- 再将上面一部分从B移动到C
代码解决:
func tower(i int,a,b,c string){
if i==1{
fmt.Println("plate 1: ",a," -> ",c)
}
if i>=2 {
tower(i-1, a, c, b)
fmt.Println("plate",i,":",a," -> ",c)
tower(i-1,b,a,c)
}
}
评论(0)