leetcode 79 單詞搜尋(用dfs解決)

2022-08-24 18:09:10 字數 1405 閱讀 5675

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

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

示例:

board =

[ ['a','b','c','e'],

['s','f','c','s'],

['a','d','e','e']

]給定 word = "abcced", 返回 true.

給定 word = "see", 返回 true.

給定 word = "abcb", 返回 false.

bool exist(vector>& board, string word) 

1、這道題給定乙個二維的vector,裡面存放著多個英文本元,還給了乙個string,代表乙個英文單詞。

要求判斷二維vector中存不存在一條路徑,連起來剛好就是string代表的單詞。

這條路徑不能使用重複的字元。

如果存在這樣一條路徑,那麼返回true,不存在就返回false。

2、這道題其實也就是深度優先搜尋(dfs)的題目,熟悉這個演算法的同學做這道題會很快。

我們還是照舊,舉個例子,大致說明一下思路。

board =

[ ['a','b','c','e'],

['s','f','c','s'],

['a','d','e','e']

]

給定的單詞是see,那麼我們首先在矩陣中找到s,有兩個,我們先試第乙個,明顯第二個字母就對不上了,於是我們進入對第二個的查詢。

在第二個周圍,我們先試s上方的e,然後再在這個e的周圍找另乙個e,明顯沒有。

於是我們退一步,不試s上方的e了,我們嘗試s下方的e,可以,再在其附近找另乙個e,也找得到。

我們在嘗試的時候,要注意這個字元之前有沒有使用過,這一步要做點處理。 

從上述思路中,我們可以知道要用迴圈+遞迴的方法來做這道題。

先用迴圈找到第乙個字元的索引,然後進入遞迴,如果遞迴成功找到了,那麼返回true。

如果不存在,那麼再迴圈找第乙個字元的下乙個索引,然後同樣進入遞迴,如果遞迴成功了,那麼返回true。

如果還是沒有,那麼再迴圈,一直迴圈,如果一直不滿足,最後返回false。

**如下(附詳解):

bool dfs(vector>& board,int i,int j,string word,int index)

}if(i0)//嘗試左邊的字元

}if(j>& board, string word)

{int hang=board.size(),lie=board[0].size();

for(int i=0;i

上述**實測20ms,beats 94.50% of cpp submissions。

leetcode 79 單詞搜尋

本題算是乙個組合類的題,也類似於深度優先搜尋演算法 設定乙個與字母構成的陣列大小相同的陣列,用來儲存某個位置的字母是否被訪問過,標註為1表示已被訪問過,避免重複 每次要看i,j位置上下左右的字母是否等於單詞第t個位置的字母 進行深度優先搜尋 bool find std vector board,st...

leetcode 79 單詞搜尋

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

Leetcode 79 單詞搜尋

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