題目描述
給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。示例單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中「相鄰」單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。
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...
回溯和深度優先遍歷
回溯演算法思想如果在遞迴中使用其實就是深度優先遍歷。這是因為在遞迴呼叫中隱含著狀態的自動回退和恢復。就比如最經典的八皇后問題,說是用回溯演算法解決,但是實質上還是使用的深度優先遍歷。所以如果想學懂,第一步應該懂的是如何用遞迴解決問題。我們知道遞迴必須具備兩個條件,乙個是呼叫自己,乙個是有終止條件。這...