AC
bool dfs(vector<vector<char> > &board,vector<vector<bool> > &visit,string word,
int i,int j,int dep,int maxdepth)
{
if(dep>=maxdepth)
{
return true;
}
// for(int i=0;i<4;++i)
// {
if(i+1<board.size()&&board[i+1][j]==word[dep+1]&&visit[i+1][j]==false)
{
visit[i+1][j]=true;
if(dfs(board,visit,word,i+1,j,dep+1,maxdepth))
{
visit[i+1][j]=false;
return true;
}
visit[i+1][j]=false;
}
if(i-1>=0&&board[i-1][j]==word[dep+1]&&visit[i-1][j]==false)
{
visit[i-1][j]=true;
if(dfs(board,visit,word,i-1,j,dep+1,maxdepth))
{
visit[i-1][j]=false;
return true;
}
visit[i-1][j]=false;
}
if(j+1<board[i].size()&&board[i][j+1]==word[dep+1]&&visit[i][j+1]==false)
{
visit[i][j+1]=true;
if(dfs(board,visit,word,i,j+1,dep+1,maxdepth))
{
visit[i][j+1]=false;
return true;
}
visit[i][j+1]=false;
}
if(j-1>=0&&board[i][j-1]==word[dep+1]&&visit[i][j-1]==false)
{
visit[i][j-1]=true;
if(dfs(board,visit,word,i,j-1,dep+1,maxdepth))
{
visit[i][j-1]=false;
return true;
}
visit[i][j-1]=false;
}
//}
return false;
}
bool exist(vector<vector<char> > &board, string word)
{
vector<vector<bool> > visit;
for(int i=0;i<board.size();++i)
{
vector<bool> tmp(board[i].size(),false);
//printf("*\n");
visit.push_back(tmp);
}
for(int j=0;j<board.size();++j)
{
for(int k=0;k<board[j].size();++k)
{
if(word[0]==board[j][k])
{
visit[j][k]=true;
if(dfs(board,visit,word,j,k,0,word.size()-1))
{
return true;
}
visit[j][k]=false;
}
}
}
return false;
}