DFS 四个方向分别search通过vis数组标记走过的点,若最后找到则返回true
bool DFS(int i,int j,vector<vector<char>>& board, string word,vector<vector<int>>& vis,int level)
{
if(level==word.size())return true;
else{
int m = board.size();
int n = board[0].size();
if(i<0||j<0||i>=m||j>=n||vis[i][j]==1||board[i][j]!=word[level])return false;
vis[i][j]=1;
bool res= (DFS(i-1,j,board,word,vis,level+1)||
DFS(i+1,j,board,word,vis,level+1)||
DFS(i,j-1,board,word,vis,level+1)||
DFS(i,j+1,board,word,vis,level+1));
vis[i][j]=0;
return res;
}
}
bool exist(vector<vector<char>>& board, string word) {
int m = board.size();
int n = board[0].size();
vector<vector<int>> vis(m,vector<int>(n,0));
for(int i=0;i<board.size();i++)
for(int j=0;j<board[0].size();j++)
if(DFS(i,j,board,word,vis,0))return true;
return false;
}