bool find3(vector<vector<char>> &board, string &words,vector<vector<bool>> &visited,int i,int row,int col)
{
int rowMax = board.size();
int colMax = board[0].size();
if (row < 0 || row >= rowMax || col < 0 || col >= colMax)//边界结束
return false;
if (true == visited[row][col])//是否访问过
return false;
if (words[i] != board[row][col])//是否满足条件
return false;
visited[row][col] = true;
i = i + 1;
if (i == words.size())//结束
{
return true;
}
//向上,向下,向左,向右
if ( find3(board, words, visited, i, row - 1, col) || find3(board, words, visited, i, row +1, col) || find3(board, words, visited, i, row, col-1) || find3(board, words, visited, i, row, col+1) )
{
return true;
}
visited[row][col] = false;//失败回退
return false;//进行下一个方向
}
bool find(int row,int col,vector<vector<char>> &board, string &words)
{
int rowMax = board.size();
int colMax = board[0].size();
vector<vector<bool>> visited (rowMax, vector<bool>(colMax,false));
return find3(board, words, visited, 0, row, col);
}
bool Search(vector<vector<char>> &board, string &words)
{
for (int i = 0; i < board.size(); i++)
{
for (int j = 0; j < board[i].size(); j++)
{
if (board[i][j] == words[0])
{
if (find(i,j,board, words))
{
return true;
}
}
}
}
return false;
}
vector<string> wordSearchII(vector<vector<char>> &board, vector<string> &words)
{
// write your code here
vector<string> ret;
for (int i = 0; i < words.size(); i++)
{
if (Search(board,words[i]))
{
ret.push_back(words[i]);
}
}
return ret;
}