新建一个列表visited,在原board每个点作为起点开始DFS,在DFS过程中,访问过的点相应的visited置为true
class Solution {
public:
bool exist(vector<vector<char>>& board, string word) {
if(board.empty()||board[0].empty()) return false;
int m=board.size(),n=board[0].size();
vector<vector<bool>> visited(m,vector<bool>(n,false));
for(int i=0;i<m;i++)
for(int j=0;j<n;j++){
if(search(board,word,0,i,j,visited)) return true;
}
return false;
}
bool search(vector<vector<char>>& board,string& word,int idx,int i,int j,vector<vector<bool>>& visited){
if(idx==word.size()) return true;
int m=board.size(),n=board[0].size();
if(i<0||i>=m||j<0||j>=n||board[i][j]!=word[idx]||visited[i][j]) return false;
visited[i][j]=true;
bool res=search(board,word,idx+1,i+1,j,visited)||
search(board,word,idx+1,i-1,j,visited)||
search(board,word,idx+1,i,j+1,visited)||
search(board,word,idx+1,i,j-1,visited);
visited[i][j]=false;
return res;
}
};