最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++使用回溯法解決黃金礦工問題

 更新時(shí)間:2022年10月08日 09:57:08   作者:劉婉晴  
在矩陣中考察回溯算法,分為任意起點(diǎn)、左上角開始等情況。從而有不同的模板,其實(shí)區(qū)別就是直接開始還是每個(gè)坐標(biāo)都去嘗試,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧

順心的人大抵一樣,坎坷的人各有各的坎坷。也只能堅(jiān)持自我修行,等待自己的機(jī)遇。

題目描述

你要開發(fā)一座金礦,地質(zhì)勘測(cè)學(xué)家已經(jīng)探明了這座金礦中的資源分布,并用大小為 m * n 的網(wǎng)格 grid 進(jìn)行了標(biāo)注。每個(gè)單元格中的整數(shù)就表示這一單元格中的黃金數(shù)量;如果該單元格是空的,那么就是 0。

為了使收益最大化,礦工需要按以下規(guī)則來開采黃金:

  • 每當(dāng)?shù)V工進(jìn)入一個(gè)單元,就會(huì)收集該單元格中的所有黃金。
  • 礦工每次可以從當(dāng)前位置向上下左右四個(gè)方向走。
  • 每個(gè)單元格只能被開采(進(jìn)入)一次。
  • 不得開采(進(jìn)入)黃金數(shù)目為 0 的單元格。
  • 礦工可以從網(wǎng)格中 任意一個(gè) 有黃金的單元格出發(fā)或者是停止。

鏈接:https://leetcode.cn/problems/path-with-maximum-gold (力扣)

示例

解題思路

這是一道典型的矩陣 回溯 的題目,依舊是回溯三步走:

1. 回溯函數(shù)參數(shù):

  • int[][] grid 表示金礦的矩陣
  • int gold 表示當(dāng)前路徑收集到的金子的總和
  • int x, int y 表示收集到了第 grid[x][y] 位置

下面讓我們來思考一個(gè)問題:本題需要建立一個(gè) boolean[][] used 備忘錄嘛?

備忘錄是一定需要的,但是對(duì)本題來說,可以通過把已經(jīng)遍歷過的 grid[x][y] 的值改為 0,以此來實(shí)現(xiàn)備忘錄,這樣更能節(jié)省空間。

2. 結(jié)束條件:

當(dāng)前遍歷位置(x,y)越界,或者當(dāng)前遍歷位置沒有金子(grid[x][y] == 0)時(shí),結(jié)束return。

3. 單層邏輯:

int temp = grid[x][y]; // 記錄值,以便回溯時(shí)恢復(fù)
gold += grid[x][y]; // 將當(dāng)前值加入 gold 和中
max = Math.max(max, gold); // 更新結(jié)果
grid[x][y] = 0; // 將 grid[x][y] 置為0,防止出現(xiàn)同一重復(fù)重復(fù)使用

然后遞歸調(diào)用4次 dfs()函數(shù),分布對(duì)應(yīng)從 (x,y)向上下左右前進(jìn)

回溯部分:

grid[x][y] = temp; // 回溯,恢復(fù) grid[x][y] 

代碼:

class Solution {
    int max = Integer.MIN_VALUE;
    public int getMaximumGold(int[][] grid) {
        for(int i=0; i<grid.length; i++){
            for (int j=0; j<grid[0].length; j++){
                if(grid[i][j] != 0) { // 從每個(gè)非0位置都可以開始
                    dfs(grid, 0, i, j);
                }
            }
        }
        return max==Integer.MIN_VALUE?0:max;
    }
    public void dfs(int[][] grid, int gold, int x, int y){
        if(!isOk(grid, x, y)){ // 判斷是否越界或到無金子位置,結(jié)束
            return;
        }
        int temp = grid[x][y];
        gold += grid[x][y];
        max = Math.max(max, gold); // 更新最大值
        grid[x][y] = 0; // 防止出現(xiàn)重復(fù)遍歷
        dfs(grid, gold, x+1, y); //向上
        dfs(grid, gold, x-1, y); //向下
        dfs(grid, gold, x, y+1); //向左
        dfs(grid, gold, x, y-1); // 向右
        grid[x][y] = temp; // 回溯
    }
	// 判斷是否越界 或 走到了無金子位置
    public boolean isOk(int[][] grid, int x, int y){
        if(x<0 || x>=grid.length || y<0 || y>=grid[0].length || grid[x][y] == 0){
            return false;
        }
        return true;
    }
}

本題類似的題還有島嶼問題,可以移步到 島嶼問題

到此這篇關(guān)于C++使用矩陣回溯法解決黃金礦工問題的文章就介紹到這了,更多相關(guān)C++黃金礦工內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中memcpy函數(shù)的使用以及模擬實(shí)現(xiàn)

    C++中memcpy函數(shù)的使用以及模擬實(shí)現(xiàn)

    memcpy是c和c++使用的內(nèi)存拷貝函數(shù),本文主要介紹了C++中memcpy函數(shù)的使用以及模擬實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 對(duì)比C語言中的setbuf()函數(shù)和setvbuf()函數(shù)的使用

    對(duì)比C語言中的setbuf()函數(shù)和setvbuf()函數(shù)的使用

    這篇文章主要介紹了對(duì)比C語言中的setbuf()函數(shù)和setvbuf()函數(shù)的使用,涉及到緩沖區(qū)與流的相關(guān)知識(shí),需要的朋友可以參考下
    2015-08-08
  • Qt5+QMediaPlayer實(shí)現(xiàn)音樂播放器的示例代碼

    Qt5+QMediaPlayer實(shí)現(xiàn)音樂播放器的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Qt5和QMediaPlayer實(shí)現(xiàn)簡(jiǎn)易的音樂播放器,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2022-12-12
  • opencv實(shí)現(xiàn)輪廓高斯濾波平滑

    opencv實(shí)現(xiàn)輪廓高斯濾波平滑

    這篇文章主要為大家詳細(xì)介紹了opencv實(shí)現(xiàn)輪廓高斯濾波平滑,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • VC下通過系統(tǒng)快照實(shí)現(xiàn)進(jìn)程管理的方法

    VC下通過系統(tǒng)快照實(shí)現(xiàn)進(jìn)程管理的方法

    這篇文章主要介紹了VC下通過系統(tǒng)快照實(shí)現(xiàn)進(jìn)程管理的方法,較為詳細(xì)的講述了VC下通過系統(tǒng)快照實(shí)現(xiàn)進(jìn)程管理的原理與具體實(shí)現(xiàn)方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • Qt使用QSoundEffect類實(shí)現(xiàn)播放音效或音樂

    Qt使用QSoundEffect類實(shí)現(xiàn)播放音效或音樂

    這篇文章主要為大家詳細(xì)介紹了Qt如何使用QSoundEffect類實(shí)現(xiàn)播放音效或音樂功能,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下
    2024-12-12
  • C語言實(shí)現(xiàn)簡(jiǎn)單彈跳小球

    C語言實(shí)現(xiàn)簡(jiǎn)單彈跳小球

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡(jiǎn)單彈跳小球,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 如何實(shí)現(xiàn)一定概率選中某一個(gè)字母

    如何實(shí)現(xiàn)一定概率選中某一個(gè)字母

    本篇文章是對(duì)如何實(shí)現(xiàn)一定概率選中某一個(gè)字母的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言攝氏度互相轉(zhuǎn)換華氏

    C語言攝氏度互相轉(zhuǎn)換華氏

    這篇文章主要介紹了C語言攝氏度互相轉(zhuǎn)換華氏,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 基于c++計(jì)算矩形重疊面積代碼實(shí)例

    基于c++計(jì)算矩形重疊面積代碼實(shí)例

    這篇文章主要介紹了基于c++計(jì)算矩形重疊面積代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07

最新評(píng)論

安福县| 平南县| 南木林县| 文山县| 博兴县| 区。| 如东县| 巴彦县| 郓城县| 嘉荫县| 汝南县| 石阡县| 平度市| 梁河县| 平顶山市| 栖霞市| 黔江区| 体育| 靖宇县| 明光市| 嵊泗县| 铜陵市| 通州市| 宁德市| 新沂市| 奉化市| 襄汾县| 阿合奇县| 新巴尔虎左旗| 长乐市| 化德县| 岳阳市| 来安县| 沧源| 堆龙德庆县| 土默特右旗| 民勤县| 闸北区| 皮山县| 涞源县| 枞阳县|