zoukankan      html  css  js  c++  java
  • go实现汉诺塔

    go实现汉诺塔

    package main
    
    import (
        "flag"
        "fmt"
        "strconv"
    )
    
    var num int // 可输入汉诺塔层数
    var Hanoi [3][]int
    var disks int = 0
    
    func init() {
        flag.IntVar(&num, "num", 100, "The greeting object.")
    }
    
    func main() {
        flag.Parse()
        if (num <= 0) {
            fmt.Printf("%v 
    ", "参数必须大于0")
            return
        }
        for i := num; i > 0; i-- {
            Hanoi[0] = append(Hanoi[0], i)
        }
        echo()
        hanoi(num, 0, 1, 2)
    }
    
    func move( from int, to int) {
        disks++
        length := len(Hanoi[from])
        Hanoi[to] = append(Hanoi[to], Hanoi[from][length-1])
        Hanoi[from] = append(Hanoi[from][:length-1])
        echo()
    }
    
    func hanoi(n int, A int, B int, C int) {
        if (n == 1) {
            move( A, C);
        } else {
            hanoi(n-1, A, C, B);
            move(A, C);
            hanoi(n-1, B, A, C);
        }
    }
    
    func echo() {
        fmt.Printf("移动第"+strconv.Itoa(disks)+"步:%v 
    ", "----------------------------------")
        fmt.Printf("塔A:%v 
    ", Hanoi[0])
        fmt.Printf("塔B:%v 
    ", Hanoi[1])
        fmt.Printf("塔C:%v 
    ", Hanoi[2])
    }
  • 相关阅读:
    文件遍历
    小记——LocalFree与指针
    小记——遍历文件2
    数据库索引
    easyui验证
    JDBC事务
    ajax登录跳转实现
    dom解析xml
    kindeditor使用
    log4j的配置
  • 原文地址:https://www.cnblogs.com/lijian-switch/p/11959076.html
Copyright © 2011-2022 走看看