/**
* 跟走迷宫类似,设置一个标记数组,记录下已经走过的点,dfs深搜,如果能搜到word的末尾,return true
*
*/
class Solution {
public:
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
int n,m;
bool exist(vector<vector<char>>& board, string word){
if(board.size()==0){
return false;
}
n=board.size();
m=board[0].size();
vector<vector<bool > >vis;
for(int i=0;i<n;i++){
vector<bool>a(m,false);
vis.push_back(a);
}
bool flag=false;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(board[i][j]==word[0]){
// for(int i=0;i<n;i++)
// for(int j=0;j<m;j++)
// vis[i][j]=false;j
vis[i][j]=true;
flag=serch_word(0,i,j,word,board,vis);
if(flag){
return true;
}
vis[i][j]=false;
}
}
}
return false;
}
bool serch_word(int step,int x,int y,string word,vector<vector<char> >board,vector<vector<bool> >&vis){
if(step>=word.size()-1){
return true;
}
for(int i=0;i<4;i++){
int xx=dx[i]+x;
int yy=dy[i]+y;
if(xx<0 || xx>=n || yy<0 || yy>=m || board[xx][yy]!=word[step+1] || vis[xx][yy]){
continue;
}
vis[xx][yy]=true;
if(serch_word(step+1,xx,yy,word,board,vis)){
return true;
}
vis[xx][yy]=false;
}
return false;
}
};
Leetcode:Word Search
最新推荐文章于 2021-10-20 23:02:10 发布