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; } };