解题思路:
* BFS + DFS
* 每次找一个字符,使用BFS(上,下,左,右)
* 第一个字符的位置通过遍历整个board得到
* 从第i个找第i+1个只能查找周围没有被使用过的,用DFS
* 用数组标记每个位置是否已被使用
class Solution {
public:
bool exist(vector<vector<char>>& board, string word) {
row = board.size();
if(row == 0) return false;
col = board[0].size();
vector<vector<bool> > used(row,vector<bool>(col,false));
found = false;
for(int i = 0; i < row; i++){ //遇到一个很奇葩的问题,当把i,j定义在for外面的时候,一直wrong answer
for(int j = 0; j < col; j++){
helper(board,used,word,0,i,j);
}
}
return found;
}
void helper(vector<vector<char> >& board,vector<vector<bool> >& used,string& word,int index,int i,int j){
if(found || (word[index] != board[i][j]) ){
return;
}
if(index == (word.size() - 1)){
found = true;
return;
}
used[i][j] = true;
if( (i > 0) && !used[i-1][j])
helper(board,used,word,index+1,i-1,j);
if( (i < row - 1) && !used[i+1][j])
helper(board,used,word,index+1,i+1,j);
if( (j > 0) && !used[i][j-1])
helper(board,used,word,index+1,i,j-1);
if( (j < col -1) && !used[i][j+1] )
helper(board,used,word,index+1,i,j+1);
used[i][j] = false;
return;
}
private:
bool found;
int row,col;
};