分析
对每个位置进行dfs遍历,每次dfs搜索时向四个方向拓展,如果超出边界或者已经访问过则放弃这个位置,其他情况再次进行dfs遍历,一直到与单词完全匹配时返回true;
typedef pair<int ,int > PII;
class Solution {
public:
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
bool dfs(vector<vector<char>>& board, string word,int x,int y,int cur){
if(board[x][y]!=word[cur])return false;
if(cur==word.size()-1)return true;
char t=board[x][y];
board[x][y]='.';
for(int i=0;i<4;i++){
int a=x+dx[i],b=y+dy[i];
if(a<0||a>=board.size()||b<0||b>=board[0].size()||board[a][b]=='.')continue;
if(dfs(board,word,a,b,cur+1)) return true;;
}
board[x][y]=t;
return false;
}
bool exist(vector<vector<char>>& board, string word) {
for(int i=0;i<board.size();i++)
for(int j=0;j<board[i].size();j++)
if(dfs(board,word,i,j,0))return true;
return false;
}
};