码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-09-18 00:23:00      阅读:43      评论:0      收藏:0      [点我收藏+]

标签:分治   VID   大于   一个   func   模式   str   int   设置   

分治算法的介绍

基本思想:分而治之(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)
	}
}

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

标签:分治   VID   大于   一个   func   模式   str   int   设置   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!