Go语言实现汉诺塔游戏

起源:

  汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

抽象为数学问题:

  如图所示,从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面

// 汉诺塔思想拆分
   A     B     C    shift			

   12          3     A-C          n-2-C
   1     2     3     A-B          n-1-B
   1     23          C-B          n-2-B
         23    1     A-C          n-C
   3     2     1     B-A          n-2-A
   3           12    B-C          n-1-C
               123   A-C          n-2-C

代码实现

func Tower(a, b, c byte, layer int) {
	if layer == 1 {
		fmt.Printf("%c->%c\n", a, c)
		return
	}

	Tower(a, c, b, layer-1)
	fmt.Printf("%c->%c\n", a, c)
	Tower(b, a, c, layer-1)
}

func main() {
	fmt.Print("输入移动的盘子数量:")
	reader := bufio.NewReader(os.Stdin)
lool:
	data, _, _ := reader.ReadLine()
	n, err := strconv.Atoi(string(data))
	if err != nil {
		fmt.Println(err)
		goto lool
	}
	Tower('A', 'B', 'C', n)
}

相关文章

类型转换 1、int转string 2、string转int 3、string转float ...
package main import s "strings" import...
类使用:实现一个people中有一个sayhi的方法调用功能,代码如...
html代码: beego代码:
1、读取文件信息: 2、读取文件夹下的所有文件: 3、写入文件...
配置环境:Windows7+推荐IDE:LiteIDEGO下载地址:http:...