记忆化搜索
class Solution {
public:
int dis[4][2]={
{-1,0},
{0,1},
{0,-1},
{1,0}
};
void DFS(vector<vector<char>>& board,int row,int col,string word,int sta,bool& tag,bool vis[])
{
if(sta>=word.size())
{
tag=true;
return;
}
if(tag)
return;
if(word[sta]==board[row][col])
{
if(sta>=word.size()-1)
{
tag=true;
return;
}
for(int i=0;i<4;i++)
{
int x=row+dis[i][0];
int y=col+dis[i][1];
if(x<0||x>=board.size()||y<0||y>=board[0].size())
continue;
if(!vis[x*board[0].size()+y])
{
vis[x*board[0].size()+y]=true;
DFS(board,x,y,word,sta+1,tag,vis);
vis[x*board[0].size()+y]=false;
}
}
}
}
bool exist(vector<vector<char>>& board, string word) {
bool tag=false;
int n=board.size();
if(n==0)
return false;
int m=board[0].size();
int i,j;
for(i=0;i<n&&!tag;i++)
{
for(j=0;j<m&&!tag;j++)
{
bool vis[n*m];
memset(vis,0,sizeof(vis));
vis[i*m+j]=1;
DFS(board,i,j,word,0,tag,vis);
}
}
return tag;
}
};