国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【leetcode】深搜、暴搜、回溯、剪枝(C++)3

這篇具有很好參考價(jià)值的文章主要介紹了【leetcode】深搜、暴搜、回溯、剪枝(C++)3。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


一、解數(shù)獨(dú)

1、題目描述

leetcode鏈接
【leetcode】深搜、暴搜、回溯、剪枝(C++)3,C++刷題,leetcode,剪枝,c++,算法

2、代碼

class Solution 
{
public:
    // 全局變量
    bool row[9][10]; // 行
    bool col[9][10]; // 列
    bool grid[3][3][10]; // 小格子
    void solveSudoku(vector<vector<char>>& board) 
    {
        // 初始化
        for(int i = 0; i < 9; i++)
        {
            for(int j = 0; j < 9; j++)
            {
                if(board[i][j] != '.') // 是數(shù)就填進(jìn)去
                {
                    int num = board[i][j] - '0'; // 記錄一下數(shù)
                    row[i][num] = col[j][num] = grid[i / 3][j / 3][num] = true; // 記錄被用過(guò)了
                }
            }
        }
        dfs(board);
    }
    bool dfs(vector<vector<char>>& board)
    {
        for(int i = 0; i < 9; i++)
        {
            for(int j = 0; j < 9; j++)
            {
                // 填數(shù)
                if(board[i][j] == '.')
                {
                    for(int num = 1; num <= 9; num++) // 從1-9一個(gè)個(gè)遍歷填數(shù)
                    {
                        if(!row[i][num] && !col[j][num] && !grid[i / 3][j / 3][num])
                        {
                            board[i][j] = num + '0'; // 填入進(jìn)去
                            row[i][num] = col[j][num] = grid[i / 3][j / 3][num] = true; // 標(biāo)記用過(guò)了
                            if(dfs(board) == true) return true; // 表示可以填進(jìn)去
                            // 恢復(fù)現(xiàn)場(chǎng)
                            board[i][j] = '.';
                            row[i][num] = col[j][num] = grid[i / 3][j / 3][num] = false; // 標(biāo)記沒(méi)用
                        }
                    }
                    return false; // 1-9都不行
                }
            }
        }
        return true; // 走完了,填完了,返回true
    }
};

3、解析

【leetcode】深搜、暴搜、回溯、剪枝(C++)3,C++刷題,leetcode,剪枝,c++,算法

二、單詞搜索

1、題目描述

leetcode鏈接

【leetcode】深搜、暴搜、回溯、剪枝(C++)3,C++刷題,leetcode,剪枝,c++,算法

2、代碼

class Solution 
{
public:
    // 全局變量
    bool visit[7][7];
    int m, n;
    bool exist(vector<vector<char>>& board, string word) 
    {
        m = board.size(); // 總共有多少行
        n = board[0].size(); // 一行有多少個(gè)
        for(int i = 0; i < m; i++)
        {
            for(int j = 0; j < n; j++)
            {
                // 匹配
                if(word[0] == board[i][j])
                {
                    visit[i][j] = true; // 標(biāo)記該點(diǎn)已經(jīng)被訪問(wèn)過(guò)了
                    if(dfs(board, i, j, word, 1/*從第一個(gè)位置往下走*/)) return true; // 遞歸到下一層
                    visit[i][j] = false; // 第一個(gè)點(diǎn)位置錯(cuò)誤,找下一個(gè)第一個(gè)對(duì)應(yīng)的點(diǎn)
                }
            }
        }
        return false; // 沒(méi)有訪問(wèn)到
    }
    // 定義一個(gè)上下左右移動(dòng)的向量
    int dx[4] = {0, 0, -1, 1}; // x x x-1 x+1
    int dy[4] = {1, -1, 0, 0}; // y+1 y-1 y y
    bool dfs(vector<vector<char>>& board, int i, int j, string word, int pos)
    {
        // 遞歸出口
        if(pos == word.size())
        {
            return true;
        }
        for(int k = 0; k < 4; k++)
        {
            int x = dx[k] + i; // x坐標(biāo)
            int y = dy[k] + j; // y坐標(biāo)
            // 不越界,當(dāng)前visit數(shù)組未被訪問(wèn)過(guò),當(dāng)前字符和word相對(duì)應(yīng)字符相同
            if(x >= 0 && x < m && y >=0 && y < n && visit[x][y] == false && word[pos] == board[x][y])
            {
                visit[x][y] = true; // 先定義到訪問(wèn)過(guò)
                if(dfs(board, x, y, word, pos + 1)) return true; // 遞歸下一層
                visit[x][y] = false; // 恢復(fù)現(xiàn)場(chǎng)
            }
        }
        return false;
    }
};

3、解析

【leetcode】深搜、暴搜、回溯、剪枝(C++)3,C++刷題,leetcode,剪枝,c++,算法

三、黃金礦工

1、題目描述

leetcode鏈接

【leetcode】深搜、暴搜、回溯、剪枝(C++)3,C++刷題,leetcode,剪枝,c++,算法

2、代碼

class Solution 
{
public:
    // 全局變量
    bool visit[16][16]; // 標(biāo)記是否訪問(wèn)過(guò)
    int m, n; // m是行,n是列
    int sum; // 總和
    int path; // 每次走的路徑
    int getMaximumGold(vector<vector<int>>& grid) 
    {
        m = grid.size();
        n = grid[0].size();
        for(int i = 0; i < m; i++)
        {
            for(int j = 0; j < n; j++)
            {
                if(grid[i][j] != 0) // 先找到第一個(gè)非零元素
                {
                    visit[i][j] = true; // 標(biāo)記一下訪問(wèn)過(guò)了
                    path += grid[i][j]; // 路徑加上
                    dfs(grid, i, j, path); // 遞歸
                    visit[i][j] = false; // 找下一個(gè)非零元素
                    path -= grid[i][j];
                } 
            }
        }
        return sum;
    }
    int dx[4] = {0, 0, 1, -1}; // 上下左右
    int dy[4] = {1, -1, 0, 0}; // 上下左右
    void dfs(vector<vector<int>>& grid, int i, int j, int path)
    {
        // 遞歸出口
        sum = max(sum, path); // 這里直接用算法max找最大值

        for(int k = 0; k < 4; k++)
        {
            int x = dx[k] + i; // 向量x
            int y = dy[k] + j; // 向量y
            if(x >= 0 && x < m && y >= 0 && y < n && visit[x][y] == false && grid[x][y] != 0)
            {
                visit[x][y] = true;
                path = path + grid[x][y]; // 路徑加上
                dfs(grid, x, y, path);
                visit[x][y] = false; // 恢復(fù)現(xiàn)場(chǎng)
                path = path - grid[x][y];
            }
        }
    }
};

3、解析

【leetcode】深搜、暴搜、回溯、剪枝(C++)3,C++刷題,leetcode,剪枝,c++,算法

四、不同路徑III

1、題目描述

leetcode鏈接

【leetcode】深搜、暴搜、回溯、剪枝(C++)3,C++刷題,leetcode,剪枝,c++,算法

2、代碼

class Solution 
{
public:
    // 全局變量
    int m, n;
    bool visit[21][21]; // 用來(lái)記錄位置是否被訪問(wèn)過(guò)
    int dx[4] = {0, 0, 1, -1};
    int dy[4] = {1, -1, 0, 0};
    int ret; // 統(tǒng)計(jì)總路數(shù)
    int step; // 記錄總共有幾個(gè)0
    int uniquePathsIII(vector<vector<int>>& grid) 
    {
        m = grid.size(); // 行
        n = grid[0].size(); // 列
        int x = 0; // 記錄1的橫坐標(biāo)
        int y = 0; // 記錄1的縱坐標(biāo)
        for(int i = 0; i < m; i++)
        {
            for(int j = 0; j < n; j++)
            {
                if(grid[i][j] == 0)
                {
                    step++; // 統(tǒng)計(jì)有幾個(gè)0
                }
                else if(grid[i][j] == 1) // 找到開(kāi)頭
                {
                    x = i;
                    y = j;
                }
            }
        }
        step += 2; // 包含上首尾
        visit[x][y] = true; // 標(biāo)記一下當(dāng)前位置被使用過(guò)
        dfs(grid, x, y, 1); // 從第一層開(kāi)始往后遞歸
        return ret;
    }
    void dfs(vector<vector<int>>& grid, int i, int j, int count/*用來(lái)記錄每一條路線的0的個(gè)數(shù)*/)
    {
        // 遞歸出口
        if(grid[i][j] == 2)
        {
            if(count == step)
            {
                ret++;
            }
            return;
        }
        for(int k = 0; k < 4; k++)
        {
            int x = i + dx[k];
            int y = j + dy[k];
            if(x >= 0 && x < m && y >= 0 && y < n && !visit[x][y] && grid[x][y] != -1)
            {
                visit[x][y] = true;
                dfs(grid, x, y, count + 1);
                visit[x][y] = false;
            }
        }
    }
};

3、解析

【leetcode】深搜、暴搜、回溯、剪枝(C++)3,C++刷題,leetcode,剪枝,c++,算法文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-835612.html

到了這里,關(guān)于【leetcode】深搜、暴搜、回溯、剪枝(C++)3的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 窮舉&&深搜&&暴搜&&回溯&&剪枝(4)

    窮舉&&深搜&&暴搜&&回溯&&剪枝(4)

    一)單詞搜索: 直接在矩陣中依次找到特定字符串 79. 單詞搜索 - 力扣(LeetCode) 畫(huà)出決策樹(shù),只需要做一個(gè)深度優(yōu)先遍歷: 1)設(shè)計(jì)dfs函數(shù):只需要關(guān)心每一層在做什么即可,從這個(gè)節(jié)點(diǎn)開(kāi)始,開(kāi)始去嘗試匹配字符串的下一個(gè)字符,就是從某一個(gè)位置的字符開(kāi)始,上下左右下標(biāo)看看

    2024年02月09日
    瀏覽(16)
  • LeetCode刷題13:回溯+剪枝解決216.組合總和 III

    LeetCode刷題13:回溯+剪枝解決216.組合總和 III

    找出所有相加之和為? n ? 的? k ? 個(gè)數(shù)的組合,且滿足下列條件: 只使用數(shù)字1到9 每個(gè)數(shù)字? 最多使用一次 ? 返回? 所有可能的有效組合的列表 ?。該列表不能包含相同的組合兩次,組合可以以任何順序返回。 示例 1: 輸入: k = 3, n = 7 輸出: [[1,2,4]] 解釋: 1 + 2 + 4 = 7 沒(méi)有其他

    2024年02月02日
    瀏覽(18)
  • DFS:深搜+回溯+剪枝解決組合問(wèn)題

    DFS:深搜+回溯+剪枝解決組合問(wèn)題

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?創(chuàng)作不易,感謝支持!!! . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) 該題和前面是類似的,但是用回溯算法,會(huì)超

    2024年04月12日
    瀏覽(22)
  • DFS:深搜+回溯+剪枝解決排列、子集問(wèn)題

    DFS:深搜+回溯+剪枝解決排列、子集問(wèn)題

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 創(chuàng)作不易,感謝三連支持??!? . - 力扣(LeetCode) . - 力扣(LeetCode) ?方案1:不合法就continue 方案2:合法才能進(jìn)循環(huán) . - 力扣(LeetCode) . - 力扣(LeetCode) ?策略1:決策樹(shù)以選不選作為參考,結(jié)果為葉子節(jié)點(diǎn) 策略2:決策樹(shù)以選幾個(gè)

    2024年04月16日
    瀏覽(22)
  • DFS:深搜+回溯+剪枝解決矩陣搜索問(wèn)題

    DFS:深搜+回溯+剪枝解決矩陣搜索問(wèn)題

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?創(chuàng)作不易,感謝三連!!? . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) 1、矩陣搜索問(wèn)題經(jīng)常要用到向量,也就是我們可以通過(guò)dx和dy來(lái)幫助我們定義方向

    2024年04月17日
    瀏覽(20)
  • 【算法】遞歸、回溯、剪枝、dfs 算法題練習(xí)(組合、排列、總和問(wèn)題;C++)

    【算法】遞歸、回溯、剪枝、dfs 算法題練習(xí)(組合、排列、總和問(wèn)題;C++)

    后面的練習(xí)是接著下面鏈接中的文章所繼續(xù)的,在對(duì)后面的題練習(xí)之前,可以先將下面的的文章進(jìn)行了解??: 【算法】{畫(huà)決策樹(shù) + dfs + 遞歸 + 回溯 + 剪枝} 解決排列、子集問(wèn)題(C++) 思路 題意分析 :要求根據(jù)給出的數(shù)字,算出合法的括號(hào)組成個(gè)數(shù)。根據(jù)題目,我們可以總

    2024年02月22日
    瀏覽(24)
  • 【leetcode刷題之路】劍指Offer(3)——搜索與回溯算法

    7 搜索與回溯算法 7.1 【BFS】劍指 Offer 32 - I - 從上到下打印二叉樹(shù) https://leetcode.cn/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof/ ??這里借助隊(duì)列來(lái)實(shí)現(xiàn)廣度優(yōu)先遍歷,由于需要訪問(wèn)每一層的節(jié)點(diǎn),而且這一層訪問(wèn)才可以訪問(wèn)下一層,所以可以考慮隊(duì)列的先進(jìn)先出,先把每一層的節(jié)

    2024年02月13日
    瀏覽(47)
  • 遞歸、搜索與回溯算法(專題二:深搜)

    遞歸、搜索與回溯算法(專題二:深搜)

    往期文章(希望小伙伴們?cè)诳催@篇文章之前,看一下往期文章) (1)遞歸、搜索與回溯算法(專題零:解釋回溯算法中涉及到的名詞)【回溯算法入門必看】-CSDN博客 (2)遞歸、搜索與回溯算法(專題一:遞歸)-CSDN博客 ?深搜是實(shí)現(xiàn)遞歸的一種方式,接下來(lái)我們之間從題

    2024年01月20日
    瀏覽(17)
  • LeetCode 39. 組合總和(回溯+剪枝)

    鏈接:LeetCode 39. 組合總和 難度:中等 給你一個(gè) 無(wú)重復(fù)元素 的整數(shù)數(shù)組 candidates 和一個(gè)目標(biāo)整數(shù) target ,找出 candidates 中可以使數(shù)字和為目標(biāo)數(shù) target 的 所有 不同組合 ,并以列表形式返回。你可以按 任意順序 返回這些組合。 candidates 中的 同一個(gè) 數(shù)字可以 無(wú)限制重復(fù)被選

    2024年02月14日
    瀏覽(22)
  • 回溯算法例題(剪枝策略)

    回溯算法例題(剪枝策略)

    鏈接: 77. 組合 鏈接: 216. 組合總和 III 鏈接: 17. 電話號(hào)碼的字母組合 鏈接: 39. 組合總和 注:使用剪枝必須對(duì)原數(shù)組進(jìn)行排序 鏈接: 40. 組合總和 II 鏈接: 131. 分割回文串 鏈接: 93. 復(fù)原 IP 地址 鏈接: 78. 子集 鏈接: 90. 子集 II 鏈接: 46. 全排列 鏈接: 47. 全排列 II 鏈接: 51. N 皇后 鏈接

    2024年02月04日
    瀏覽(82)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包