class Solution {
public:
bool arr[101][101] = { 0 };//用来标记该位置是否查询过
int n,m;
int dy[4]={1,-1,0,0};
int dx[4]={0,0,1,-1};
bool exist(vector<string>& board, string word) {
n = board.size(); m = board[0].size();
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(board[i][j]==word[0])
{
if(dfs(i,j,board,word,0)) return true;
}
}
}
return false;
}
bool dfs(int i,int j,vector<string>& board, string& word,int pos)
{
if(pos == word.size()-1)
{
return true;
}
arr[i][j] = true;//标记查询位置
for(int k=0;k<4;k++)
{
int a = i + dx[k];
int b = j + dy[k];
if(a>=0 && a<n && b>=0 && b<m && !arr[a][b] && board[a][b]==word[pos+1])
{
if(dfs(a,b,board,word,pos+1)) return true;
}
}
arr[i][j] = false;//撤销查询位置
return false;
}
};