小馬過河,尋找最短路徑

題目看截圖

圖片描述

算法如下

package main

import (
    "fmt"
    "sort"
)
func jz(arr [][]int) int{
    sum:=0;
    l := len(arr)
    for i:=0;i<l;{
        // 這裏利用sort.Ints對數組進行由小到大排序
        sort.Ints(arr[i])
        if i==0 {
            sum+=arr[i][0]
        }
        if i+1<l && i+2<l {
            //判斷從當前指針位置,向後數1 和數2兩個位置數字的大小,選擇較小的
            sort.Ints(arr[i+1])
            sort.Ints(arr[i+2])

            if arr[i+1][0]<arr[i+2][0] {
                sum+=arr[i+1][0]
                i+=2
            }else{
                sum+=arr[i+2][0]
                i+=3
            }
        }else if i+1<l{
            //臨界值處理,此時的i+2已經越界 不能選擇直接使用最後一個值就可以了
            sort.Ints(arr[i+1])
            sum+=arr[i+1][0]
            i++
            break

        }else{
            //臨界值處理
            sort.Ints(arr[i])
            sum+=arr[i][0]
            i++
        }
    }
    return sum
}
func main() {
    //矩陣聲明5x5
    arr:=[][]int{
        {3,0,-2,4,0},
        {-1,2,-2,1,4},
        {3,1,-2,-3,3},
        {2,-4,-3,-3,2,},
        {5,2,-2,-3,1},
    }
    fmt.Println(arr)
    a:=jz(arr)
    fmt.Println("總數",a)
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章