go最小路径

go最小路径

package main

import (
    "fmt"
    "flag"
    "math/rand"
    "time"
    )

var i int
var j int
var path [][]int
var value [][]int

func init() {
    flag.IntVar(&i, "i", 10, "The greeting object.")
    flag.IntVar(&j, "j", 10, "The greeting object.")
}

func main() {
    flag.Parse()
    initArray()
    fmt.Printf("初始化数组为:%v \n", "")
    for a := 0; a < i; a++ {
        fmt.Printf("%v \n", path[a])
    }
    walk()
    fmt.Printf("路径权值为:%v \n", "")
    for a := 0; a < i; a++ {
        fmt.Printf("%v \n", value[a])
    }
    fmt.Printf("最小路径为:%v \n", value[0][0])
}

// 计算路径权值
func walk() {
    value[i-1][j-1] = path[i-1][j-1]
    for a := j-2; a >= 0; a-- {
        value[i-1][a] = value[i-1][a+1] + path[i-1][a]
    }
    for a := i-2; a >= 0; a-- {
        value[a][j-1] = value[a+1][j-1] + path[a][j-1]
    }
    for a := i-2; a >= 0; a-- {
        for b := j-2; b >= 0; b-- {
            minA := value[a+1][b] + path[a][b]
            minB := value[a][b+1] + path[a][b]
            value[a][b] = min(minA,minB)
        }
    }
}

// 比较两个数大小,返回较小的
func min(a int,b int)int{
    if(a < b){
        return a
    }else{
        return b
    }
}

// 随机生成初始化数组
func initArray(){
    rand.Seed(time.Now().UnixNano())
    for a := 0; a < i; a++ {
        arrayA := []int{}
        arrayB := []int{}
        for b := 0; b < j; b++ {
            arrayA = append(arrayA,rand.Intn(10))
            arrayB = append(arrayB,0)
        }
        path = append(path,arrayA)
        value = append(value,arrayB)
    }
}

 

posted on 2019-11-29 17:19  switch大咖  阅读(179)  评论(0编辑  收藏  举报