zoukankan      html  css  js  c++  java
  • 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
    ", a, c)
    		return
    	}
    
    	Tower(a, c, b, layer-1)
    	fmt.Printf("%c->%c
    ", 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)
    }
    
    >>>
    输入移动的盘子数量:3
    A->C
    A->B
    C->B
    A->C
    B->A
    B->C
    A->C
    
  • 相关阅读:
    HDU 1160 FatMouse's Speed ——(DP)
    HDU 1114 Piggy-Bank ——(完全背包)
    poj 1458 Common Subsequence ——(LCS)
    HDU 1087 Super Jumping! Jumping! Jumping! ——(LIS变形)
    HDU 1257 最少拦截系统 ——(LIS)
    strrchr函数
    常用位操作
    Map中放置类指针并实现调用
    log4net 一分钟上手
    简单易懂的冒泡排序
  • 原文地址:https://www.cnblogs.com/remixnameless/p/14728512.html
Copyright © 2011-2022 走看看