第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

矩陣遍歷沒(méi)有做最優(yōu)路徑

矩陣遍歷沒(méi)有做最優(yōu)路徑

Go
慕容708150 2023-08-07 15:01:11
我遇到了以下問(wèn)題并試圖解決:grid在代表櫻桃田的N x N 中,每個(gè)單元格都是三個(gè)可能的整數(shù)之一。0表示該單元格為空,可以通過(guò);1表示該單元格內(nèi)有一顆櫻桃,您可以拾取并穿過(guò)它;-1表示該單元格中有一根刺擋住了你的路。您的任務(wù)是按照以下規(guī)則收集盡可能多的櫻桃:從位置 (0, 0) 開(kāi)始,通過(guò)向右或向下移動(dòng)穿過(guò)有效路徑單元格(值 > 0 或 1 的單元格)到達(dá) (N-1, N-1);到達(dá)(N-1, N-1)后,通過(guò)向左或向上移動(dòng)經(jīng)過(guò)有效路徑單元格返回到(0, 0);當(dāng)經(jīng)過(guò)一個(gè)包含櫻桃的路徑單元格時(shí),你拿起它,該單元格變成一個(gè)空單元格(0);如果 (0, 0) 和 (N-1, N-1) 之間沒(méi)有有效路徑,則無(wú)法收集到櫻桃。Example 1:Input: grid =[[0, 1, -1], [1, 0, -1], [1, 1,  1]]Output: 5Explanation: The player started at (0, 0) and went down, down, right right to reach (2, 2).4 cherries were picked up during this single trip, and the matrix becomes [[0,1,-1],[0,0,-1],[0,0,0]].Then, the player went left, up, up, left to return home, picking up one more cherry.The total number of cherries picked up is 5, and this is the maximum possible.筆記:grid是一個(gè)二維N數(shù)組N,其中1 <= N <= 50.每個(gè)grid[i][j]都是集合中的一個(gè)整數(shù){-1, 0, 1}。保證grid[0][0]和grid[N-1][N-1]不為-1。所以我需要編寫一個(gè)函數(shù)cherryPickup,它接受一個(gè)網(wǎng)格并返回最大分?jǐn)?shù)。我的第一個(gè)次優(yōu)嘗試(用 Go 編寫)如下,據(jù)說(shuō)它會(huì)嘗試遍歷每條可能的路徑,在往返路徑完成后將分?jǐn)?shù)存儲(chǔ)在切片中,然后返回切片中存在的最大分?jǐn)?shù):func cherryPickup(grid [][]int) int {    values := []int{}    pVals := &values    finalPoints := 0    // Begin top-down path    traverseAndCollectTopDown(grid, 0, 0, 0, pVals)    // Find max value in slice    for i, pathPoints := range values {        if i == 0 || pathPoints > finalPoints {            finalPoints = pathPoints        }    }    return finalPoints}func isTraversable(grid [][]int, x, y int) bool {    return (grid[x][y] != -1)}func isOnBounds(grid [][]int, x, y int) bool {    return (x < len(grid) && y < len(grid[0]) && x >= 0 && y >= 0)}目前它通過(guò)了一系列測(cè)試,但這個(gè)失敗了,我不知道為什么。輸入:[[1,1,1,1,0,0,0],[0,0,0,1,0,0,0],[0,0,0,1,0,0,1],[1,0,0,1,0,0,0],[0,0,0,1,0,0,0],[0,0,0,1,0,0,0],[0,0,0,1,1,1,1]]輸出:10預(yù)計(jì):15我知道這個(gè)網(wǎng)格必須得分 15 分,但是,為什么我的代碼無(wú)法走上獲勝之路,只得分 10 分?另外,您是否推薦任何終端實(shí)用程序、程序或策略來(lái)幫助更好地可視化每次運(yùn)行時(shí)發(fā)生的情況?
查看完整描述

1 回答

?
縹緲止盈

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊

您用于traverseAndCollectTopDown/ 的參數(shù)traverseAndCollectBottomUp是grid [][]int. 您正在修改它,然后將其直接傳遞到其他函數(shù)(遞歸地)。在 go 中,切片是通過(guò)引用有效傳遞的,這意味著當(dāng)您的一個(gè)例程編輯該切片時(shí),這也會(huì)影響所有其他例程所持有的切片(因此,一旦一條路徑找到“1”,它就會(huì)被刪除,另一條路徑也會(huì)繼續(xù)運(yùn)行)通過(guò)同一個(gè)單元格會(huì)發(fā)現(xiàn)那里有一個(gè)“0”)。


要解決此問(wèn)題,請(qǐng)?jiān)谶M(jìn)行遞歸調(diào)用之前獲取網(wǎng)格的副本,例如在修改網(wǎng)格之前grid = copyGrid(grid)調(diào)用traverseAndCollectTopDown/ traverseAndCollectBottomUp。


func copyGrid(in [][]int) [][]int {

    duplicate := make([][]int, len(in))

    for i := range in {

        duplicate[i] = make([]int, len(in[i]))

        copy(duplicate[i], in[i])

    }

    return duplicate 

}


查看完整回答
反對(duì) 回復(fù) 2023-08-07
  • 1 回答
  • 0 關(guān)注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)