题目描述:
解题思路:搜索题,每个点分上下左右四个方向搜索,对每个点都跑一次,代码如下:
class Solution {
public:
bool exist(vector<vector<char>>& board, string word) {
if(board.empty()) return false;
int m = board.size();
int n = board[0].size();
vector<vector<bool>> visit(m,vector<bool>(n,false));
bool res = false;
for(int i = 0 ;i < m ;i++){
for(int j = 0 ;j < n;j++){
res = dfsSearch(board,word,0,i,j,visit);
if(res == true){
return true;
}
}
}
return false;
}
private:
bool dfsSearch(vector<vector<char>>& board,string& word,int cnt,int p,int q,vector<vector<bool>>& visit){
if(cnt == word.size()){ // 放最前面,不然会越界
return true;
}
if(p < 0 || p >= board.size() || q < 0 || q >= board[0].size()){
return false;
}
if(visit[p][q] == true || board[p][q] != word[cnt]){
return false;
}
visit[p][q] = true;
if(dfsSearch(board,word,cnt + 1, p,q + 1,visit) || dfsSearch(board,word,cnt + 1, p + 1,q,visit) || dfsSearch(board,word,cnt + 1, p - 1,q,visit) || dfsSearch(board,word,cnt + 1, p,q - 1,visit)){
return true;
}
visit[p][q] = false;
return false;
}
};