首页 > 编程语言 > 详细

用分治算法解决汉诺塔问题

时间:2020-09-14 00:01:01      阅读:80      评论:0      收藏:0      [点我收藏+]

分治算法的介绍

基本思想:分而治之(Divide and conquer)

模式:

  1. 设置一个阈值N0
  2. 当问题规模p小于N0时,采用基本子算法
  3. 当规模大于N0时,将问题分解再合并

汉诺塔问题

思路:

  1. 当片数n=1时:将一片从A移动到C
  2. 当片数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)
	}
}

用分治算法解决汉诺塔问题

原文:https://www.cnblogs.com/sjx13/p/13664076.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!