深度優先遍歷 回溯 79 單詞搜尋

2021-10-20 02:38:53 字數 1259 閱讀 4459

題目描述

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

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

示例

board =

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

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

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

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

給定 word = 「see」, 返回 true

給定 word = 「abcb」, 返回 false

解題思路

題意容易理解,即判斷word是否在矩陣board**現。以矩陣作為搜尋的範圍,我們應該想到圖的鄰接矩陣儲存結構,而結合此題題意,不難判斷出應該使用深度優先遍歷查詢word是否出現在矩陣中。

class

solution,,

,};public

boolean

exist

(char

board, string word)

}return

false;}

//用於判斷以x,y為起始字元,遍歷所有未標記結點,能否找出words[index,words.length())的字元

private

boolean

dfs(

char

board,

int x,

int y,

char

words,

int index,

boolean

visit)

//此時已經搜尋完(x,y)相鄰結點,且沒有找出words字串,因此將標記撤回,以便後續遍歷

visit[x]

[y]=

false;}

return

false;}

//判斷節點是否在矩陣內,即節點橫縱座標是否越界

private

boolean

inarea

(char

board,

int i,

int j)

}

回溯,深度遍歷 單詞搜尋

單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。board a b c e s f c s a d e e 給定 word abcced 返回 true 給定 word see 返回 true 給定 wor...

79 單詞搜尋(dfs 回溯)

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

回溯和深度優先遍歷

回溯演算法思想如果在遞迴中使用其實就是深度優先遍歷。這是因為在遞迴呼叫中隱含著狀態的自動回退和恢復。就比如最經典的八皇后問題,說是用回溯演算法解決,但是實質上還是使用的深度優先遍歷。所以如果想學懂,第一步應該懂的是如何用遞迴解決問題。我們知道遞迴必須具備兩個條件,乙個是呼叫自己,乙個是有終止條件。這...