2021 3 1 79 單詞搜尋 回溯法)

2021-10-20 17:44:49 字數 1771 閱讀 3902

題目:

給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。

單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中「相鄰」單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。

示例:board =

[[『a』,『b』,『c』,『e』],

[『s』,『f』,『c』,『s』],

[『a』,『d』,『e』,『e』]

]給定 word = 「abcced」, 返回 true

給定 word = 「see」, 返回 true

給定 word = 「abcb」, 返回 false

題解:

class

solution

// 最後乙個字母也相等,返回成功

if(board[i]

[j]==word[index]

&&index==word.

size()

-1)//不可重複用同一元素,因此用0掩蓋這一位置

board[i]

[j]=

'0';

//回溯if(

backtrack

(board,word,i-

1,j,index+1)

)elseif(

backtrack

(board,word,i+

1,j,index+1)

)elseif(

backtrack

(board,word,i,j-

1,index+1)

)elseif(

backtrack

(board,word,i,j+

1,index+1)

)// 如果不通,回溯至上乙個狀態

board[i]

[j]=word[index]

;return

false;}

bool

exist

(vectorchar

>>

& board, string word)}}

return result;}}

;

官方題解:

class

solution

// 最後乙個字母也相等,返回成功

if(board[i]

[j]==word[index]

&&index==word.

size()

-1)//不可重複用同一元素,因此用0掩蓋這一位置

board[i]

[j]=

'0';

//回溯if(

backtrack

(board,word,i-

1,j,index+1)

||backtrack

(board,word,i+

1,j,index+1)

||backtrack

(board,word,i,j-

1,index+1)

||backtrack

(board,word,i,j+

1,index+1)

)// 如果不通,回溯至上乙個狀態

board[i]

[j]=word[index]

;return

false;}

bool

exist

(vectorchar

>>

& board, string word)}}

return result;}}

;

暴力搜尋 回溯法

回溯法 backtracking 是深度優先搜尋 dfs 的一種,按照深度優先的順序便利解答樹。應用範圍很廣,只要能把待求解的問題分成不太多的步驟,每個步驟又只有不太多的選擇,都可以考慮應用回溯法。在學習回溯法之前,一定要保證遞迴程式能熟練準確地寫出。當把問題分成若干步驟並遞迴求解時,如果當前步驟沒...

LeetCode 79 單詞搜尋(回溯DFS)

給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。示例 board a b c e s f c s a d e e 給定 word abcced 返回 ...

回溯法遵循深度優先嗎 深度優先搜尋(回溯法)

事實上,深度優先搜尋屬於圖演算法的一種,英文縮寫為dfs即depth first search.其過程簡要來說是對每乙個可能的分支路徑深入到不能再深入為止,而且每個節點只能訪問一次.舉例說明之 下圖是乙個無向圖,如果我們從a點發起深度優先搜尋 以下的訪問次序並不是唯一的,第二個點既可以是b也可以是c...