1.题目链接
点击这里
2.解题思路
遍历整个矩阵,从与word首字符相同的位置开始搜索匹配,DFS中记下当前匹配word的最大下标,当下标等于word的最大下标时即匹配成功。
3.代码
class Solution {
public:
int n,m;
int sta[8][8];
bool flag;
void dfs(int x,int y,int index,string word,vector<vector<char>>& board)
{
int dx[]={
0,-1,0,1};
int dy[]={
1,0,-1,0};
if(index==(int)word.size()-1){
flag=true;
return;
}else{
for(int i=0;i<4;i++){
int nx=x+dx[i],ny=y+dy[i];
if(nx<0||nx>=n||ny<0||ny>=m) continue;
if(board[nx][ny]==word[index+1]&&!sta[nx][ny]){
sta[nx][ny]=1;
dfs(nx,ny,index+1,word,board);
sta[nx][ny]=0;
}
}
}
}
bool exist(vector<vector<char>>& board, string word) {
n=(int)board.size(),m=(int)board.back().size();
memset(sta,0,sizeof(sta));
flag=false;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(board[i][j]==word[0]){
sta[i][j]=1;
dfs(i,j,0,word,board);
sta[i][j]=0;//注意要恢复现场
}
}
}
return flag;
}
};