给定一个二维网格和一个单词,找出该单词是否存在于网格中。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
示例:
board =
[
['A','B','C','E'],
['S','F','C','S'],
['A','D','E','E']
]
给定 word = "ABCCED", 返回 true.
给定 word = "SEE", 返回 true.
给定 word = "ABCB", 返回 false.
C++
class Solution {
public:
bool DFS(vector<vector<char>>& board, string word, int row, int col, int index, vector<vector<int>>& flag)
{
if(index==word.length())
{
return true;
}
if(row<0 || row>=board.size() || col<0 || col>=board[0].size() || board[row][col]!=word[index])
{
return false;
}
if(0==flag[row][col])
{
flag[row][col]=1;
if(DFS(board, word, row-1, col, index+1, flag))
{
return true;
}
if(DFS(board, word, row+1, col, index+1, flag))
{
return true;
}
if(DFS(board ,word, row, col-1, index+1, flag))
{
return true;
}
if(DFS(board, word, row, col+1, index+1, flag))
{
return true;
}
flag[row][col]=0;
}
return false;
}
bool exist(vector<vector<char>>& board, string word)
{
int m=board.size();
int n=board[0].size();
int k=word.length();
vector<vector<int>> flag(m,vector<int>(n,0));
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(DFS(board, word, i, j, 0, flag))
{
return true;
}
}
}
return false;
}
};