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

劍指offer(C++)-JZ12:矩陣中的路徑(算法-回溯)

這篇具有很好參考價(jià)值的文章主要介紹了劍指offer(C++)-JZ12:矩陣中的路徑(算法-回溯)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

作者:翟天保Steven
版權(quán)聲明:著作權(quán)歸作者所有,商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處

劍指offer(C++)-JZ12:矩陣中的路徑(算法-回溯)

題目描述:

請(qǐng)?jiān)O(shè)計(jì)一個(gè)函數(shù),用來(lái)判斷在一個(gè)n乘m的矩陣中是否存在一條包含某長(zhǎng)度為len的字符串所有字符的路徑。路徑可以從矩陣中的任意一個(gè)格子開(kāi)始,每一步可以在矩陣中向左,向右,向上,向下移動(dòng)一個(gè)格子。如果一條路徑經(jīng)過(guò)了矩陣中的某一個(gè)格子,則該路徑不能再進(jìn)入該格子。 例如A矩陣中包含一條字符串"bcced"的路徑,但是矩陣中不包含"abcb"路徑,因?yàn)樽址牡谝粋€(gè)字符b占據(jù)了矩陣中的第一行第二個(gè)格子之后,路徑不能再次進(jìn)入該格子。

數(shù)據(jù)范圍:0≤n,m≤20?,1≤len≤25?

示例:

輸入:

[[a,b,c,e],[s,f,c,s],[a,d,e,e]],"abcced"

返回值:

true

解題思路:

本題是回溯法的經(jīng)典題目,也常用于解決迷宮問(wèn)題。思路如下:

  1. 用flag記錄當(dāng)前點(diǎn)是否走過(guò),結(jié)合矩陣數(shù)據(jù)和字符數(shù)據(jù),運(yùn)用dfs(深度優(yōu)先遍歷)進(jìn)行路徑探索。
  2. dfs中,若當(dāng)前點(diǎn)出現(xiàn)下標(biāo)越界、字符不匹配和已經(jīng)走過(guò)的情況,則終止當(dāng)前路;若字符匹配上了,則認(rèn)為當(dāng)前點(diǎn)滿足要求,先暫時(shí)將flag設(shè)為true,并以該點(diǎn)為中心,繼續(xù)向上下左右四個(gè)方向探索新的點(diǎn)位;若四個(gè)方向有路可走,則依次遞進(jìn),直到有一條路徑和字符串完全對(duì)應(yīng);若四個(gè)方向均無(wú)路,則回退一步,并將當(dāng)前點(diǎn)的flag設(shè)為false。

總的來(lái)說(shuō),題目運(yùn)用了回溯、深度優(yōu)先遍歷和遞歸的思想。

測(cè)試代碼:

class Solution {
public:
    // 深度優(yōu)先遍歷
    bool dfs(vector<vector<char>>& matrix, int m, int n, int i, int j, string word, int k, vector<vector<bool>>& flag){
        // 下標(biāo)越界、字符不匹配、已經(jīng)遍歷過(guò),則false
        if(i < 0 || i >= m || j < 0 || j >= n || matrix[i][j] != word[k] || flag[i][j])
            return false;
        // 刷新標(biāo)識(shí)符
        flag[i][j]= true;
        // 字符串全部集齊,則true
        if(k == int(word.size() - 1))
            return true;
        // 上下左右四方向搜索,若有路通,則true    
        if(dfs(matrix, m, n, i - 1, j, word, k + 1, flag)
           || dfs(matrix, m, n, i + 1, j, word, k + 1, flag)
           || dfs(matrix, m, n, i, j - 1, word, k + 1, flag)
           || dfs(matrix, m, n, i, j +1 , word, k + 1, flag))
           return true;
        // 該點(diǎn)位無(wú)有效路徑,倒退一步,此點(diǎn)未使用,所以重置flag
        flag[i][j] = false;
        return false;
    }

    // 是否有目標(biāo)路徑
    bool hasPath(vector<vector<char> >& matrix, string word) {
        // 空數(shù)據(jù)判斷
        int m = int(matrix.size());
        int n = int(matrix[0].size());
        if(m == 0 || n == 0)
            return false;
        // flag二維容器存放標(biāo)識(shí)符,判斷當(dāng)前點(diǎn)是否走過(guò)
        vector<vector<bool>> flag(m,vector<bool>(n, false));
        // 遍歷
        for(int i = 0; i < m; ++i)
        {
            for(int j = 0; j < n; ++j)
            {
                if(dfs(matrix, m, n, i, j, word, 0, flag))
                    return true;
            }
        }
        return false;
    }
};

六一兒童節(jié)快樂(lè)!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-514654.html

到了這里,關(guān)于劍指offer(C++)-JZ12:矩陣中的路徑(算法-回溯)的文章就介紹完了。如果您還想了解更多內(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)文章

  • 劍指offer12.矩陣中的路徑

    劍指offer12.矩陣中的路徑

    ?太難了,想了一會(huì)兒沒(méi)有頭緒就直接看了題解。 題解用的是回溯算法,check(i,j,k)表示從board[i][j]位置開(kāi)始能否搜索到word第k個(gè)字符后面的字串,能搜索到返回true否則返回false。如果board[i][j] != word[k] 返回false。如果相等且是最后一個(gè)字符返回true,如果相等但不是最后一個(gè)字符

    2024年02月13日
    瀏覽(18)
  • 劍指Offer12.矩陣中的路徑 C++

    劍指Offer12.矩陣中的路徑 C++

    給定一個(gè) m x n 二維字符網(wǎng)格 board 和一個(gè)字符串單詞 word 。如果 word 存在于網(wǎng)格中,返回 true ;否則,返回 false 。單詞必須按照字母順序,通過(guò)相鄰的單元格內(nèi)的字母構(gòu)成,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個(gè)單元格內(nèi)的字母不允許被重復(fù)使用。

    2024年02月14日
    瀏覽(20)
  • 劍指offer(C++)-JZ13:機(jī)器人的運(yùn)動(dòng)范圍(算法-回溯)

    劍指offer(C++)-JZ13:機(jī)器人的運(yùn)動(dòng)范圍(算法-回溯)

    作者:翟天保Steven 版權(quán)聲明:著作權(quán)歸作者所有,商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處 題目描述: 地上有一個(gè) rows 行和 cols 列的方格。坐標(biāo)從 [0,0] 到 [rows-1,cols-1] 。一個(gè)機(jī)器人從坐標(biāo) [0,0] 的格子開(kāi)始移動(dòng),每一次只能向左,右,上,下四個(gè)方向移動(dòng)一格,

    2024年02月12日
    瀏覽(37)
  • 用 Go 劍指 Offer 12. 矩陣中的路徑

    用 Go 劍指 Offer 12. 矩陣中的路徑

    給定一個(gè)?m x n 二維字符網(wǎng)格?board 和一個(gè)字符串單詞?word 。如果?word 存在于網(wǎng)格中,返回 true ;否則,返回 false 。 單詞必須按照字母順序,通過(guò)相鄰的單元格內(nèi)的字母構(gòu)成,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個(gè)單元格內(nèi)的字母不允許被重復(fù)使

    2023年04月10日
    瀏覽(15)
  • (搜索) 劍指 Offer 12. 矩陣中的路徑 ——【Leetcode每日一題】

    (搜索) 劍指 Offer 12. 矩陣中的路徑 ——【Leetcode每日一題】

    難度:中等 給定一個(gè) m * n 二維字符網(wǎng)格 board 和一個(gè)字符串單詞 word 。如果 word 存在于網(wǎng)格中,返回 true ;否則,返回 false 。 單詞必須按照字母順序,通過(guò)相鄰的單元格內(nèi)的字母構(gòu)成,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個(gè)單元格內(nèi)的字母不允許

    2024年02月12日
    瀏覽(28)
  • 劍指 Offer 12. 矩陣中的路徑 / LeetCode 79. 單詞搜索(深度優(yōu)先搜索)

    劍指 Offer 12. 矩陣中的路徑 / LeetCode 79. 單詞搜索(深度優(yōu)先搜索)

    鏈接:劍指 Offer 12. 矩陣中的路徑;LeetCode 79. 單詞搜索 難度:中等 給定一個(gè) m x n 二維字符網(wǎng)格 board 和一個(gè)字符串單詞 word 。如果 word 存在于網(wǎng)格中,返回 true ;否則,返回 false 。 單詞必須按照字母順序,通過(guò)相鄰的單元格內(nèi)的字母構(gòu)成,其中“相鄰”單元格是那些水平相

    2024年02月02日
    瀏覽(28)
  • 劍指offer(C++)-JZ29:順時(shí)針打印矩陣(算法-模擬)

    劍指offer(C++)-JZ29:順時(shí)針打印矩陣(算法-模擬)

    作者:翟天保Steven 版權(quán)聲明:著作權(quán)歸作者所有,商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處 題目描述: 輸入一個(gè)矩陣,按照從外向里以順時(shí)針的順序依次打印出每一個(gè)數(shù)字,例如,如果輸入如下4 X 4矩陣: 則依次打印出數(shù)字 數(shù)據(jù)范圍: 0 = matrix.length = 100 0 = ma

    2024年02月10日
    瀏覽(21)
  • 劍指offer12 矩陣中的路徑 13 機(jī)器人的運(yùn)動(dòng)范圍 34.二叉樹(shù)中和為某一值得路徑

    劍指offer12 矩陣中的路徑 13 機(jī)器人的運(yùn)動(dòng)范圍 34.二叉樹(shù)中和為某一值得路徑

    //寫的有點(diǎn)問(wèn)題,暫時(shí)想不到怎么改,先放著,通過(guò)用例71/83 卡住的是abcd 但是改了又有問(wèn)題 無(wú)語(yǔ) 看了 答案 都寫不對(duì) 在類成員里面定義了row和col 就不要重復(fù)定義了 不然不知道為什么就開(kāi)始發(fā)瘋 先貼出蠢貨寫出來(lái)的東西 審題也審不明白 機(jī)器人只能上下左右走 不能一行一行

    2024年02月15日
    瀏覽(25)
  • JZ12 矩陣中的路徑

    JZ12 矩陣中的路徑

    劍指Offer編程鏈接:JZ12 題目描述: 思路:遞歸+回溯的方法,總結(jié)一下什么情況需要使用遞歸: 遞歸在解決問(wèn)題時(shí),通常涉及以下情況: 問(wèn)題可被分解為較小的相似子問(wèn)題。 子問(wèn)題與原問(wèn)題具有相同的結(jié)構(gòu),只是規(guī)模更小。 每個(gè)子問(wèn)題的解可以通過(guò)遞歸調(diào)用來(lái)獲得。 存在

    2024年02月10日
    瀏覽(17)
  • 劍指offer(C++)-JZ49:丑數(shù)(算法-其他)

    劍指offer(C++)-JZ49:丑數(shù)(算法-其他)

    作者:翟天保Steven 版權(quán)聲明:著作權(quán)歸作者所有,商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處 題目描述: 把只包含質(zhì)因子2、3和5的數(shù)稱作丑數(shù)(Ugly Number)。例如6、8都是丑數(shù),但14不是,因?yàn)樗|(zhì)因子7。 習(xí)慣上我們把1當(dāng)做是第一個(gè)丑數(shù)。求按從小到大的順

    2024年02月03日
    瀏覽(27)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包