class Solution {
public:
bool DFS(vector<vector<char>>&board,string word,int step,int x,int y,vector<vector<bool>> &visited)
{
if(step==word.size())
{
return true;
}
if(board[x][y]!=word[step])
return false;
if(visited[x][y])
return false;
if(x<0||y<0||x>=board.size()||y>=board.size())
return false;
visited[x][y]=true;
bool ret=DFS(board,word,step+1,x+1,y,visited)||DFS(board,word,step+1,x-1,y,visited)||DFS(board,word,step+1,x,y+1,visited)||DFS(board,word,step+1,x,y-1,visited);
visited[x][y]=false;
return ret;
}
bool exist(vector<vector<char> > &board, string word) {
int m=board.size();
int n=board[0].size();
if(word.size()>m&&word.size()>n)
return false;
vector<vector<bool>> visited(m,vector<bool>(n,false));
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(DFS(board,word,0,i,j,visited))
return true;
}
}
return false;
}
};
public:
bool DFS(vector<vector<char>>&board,string word,int step,int x,int y,vector<vector<bool>> &visited)
{
if(step==word.size())
{
return true;
}
if(board[x][y]!=word[step])
return false;
if(visited[x][y])
return false;
if(x<0||y<0||x>=board.size()||y>=board.size())
return false;
visited[x][y]=true;
bool ret=DFS(board,word,step+1,x+1,y,visited)||DFS(board,word,step+1,x-1,y,visited)||DFS(board,word,step+1,x,y+1,visited)||DFS(board,word,step+1,x,y-1,visited);
visited[x][y]=false;
return ret;
}
bool exist(vector<vector<char> > &board, string word) {
int m=board.size();
int n=board[0].size();
if(word.size()>m&&word.size()>n)
return false;
vector<vector<bool>> visited(m,vector<bool>(n,false));
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(DFS(board,word,0,i,j,visited))
return true;
}
}
return false;
}
};