二維數組尋找最短路徑的解法


一個n*n的二維數字數組,從左上角出發,只能向右或向左移動,目標點是右下角

求一個最短路徑和

Demo代碼如下:

package go_package

import (
    "fmt"
    "testing"
)

func TestShortestPath(t *testing.T) {

    grib := [][]int{
            {1,2,3},
            {7,8,5},
            {4,2,1}}
    result := handleshorTestLength(grib)
    fmt.Println("結果是:", result)
}


/**
 * 將累加結果寫入對應的位置記錄
 */
func handleshorTestLength(grib [][]int) int{
    length := len(grib)
    for i:=0; i<length; i++ {
        for j:=0; j<length; j++ {
            // 比較上面的點和左邊的點值的大小,來決定當前點的更新值
            // 考慮邊界情況
            if i == 0 {
                // 第一行
                if j > 0 {
                    grib[i][j] = grib[i][j] + grib[i][j-1]
                }
                continue
            }

            if j == 0 {
                // 第一列 沒有左邊的值
                if i > 0 {
                    grib[i][j] = grib[i][j] + grib[i-1][j]
                }
                continue
            }

            // 其余的點既有上邊的,也有左邊的;可以正常進行判斷
            up := grib[i][j-1]
            left := grib[i-1][j]
            if up > left {
                grib[i][j] = grib[i][j] + left
            }else {
                grib[i][j] = grib[i][j] + up
            }
        }
    }
    // 返回[length-1][length-1]位置的值
    return grib[length-1][length-1]
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM