二维数组寻找最短路径的解法


一个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