题目描述
是一道很常见的深搜题目,不过里面要考虑一些边界问题,比如走过的路径是不能再次走入的,所以我这里我自己的
代码想到是利用一个新的二维的数组,记录走过的路径,不过题解的直接将原二维数组中的路径隐藏,这样可以节省
内存空间,等搜索完,再将路径重新赋值进去,tql,剩下就没啥坑点了,直接四个方向搜索,到递归出口就结束
class Solution {
public:
vector<vector<int>> v;
bool exist(vector<vector<char>>& board, string word) {
rows=board.size();
lines=board[0].size();
for(int i=0;i<rows;i++)
{
for(int j=0;j<lines;j++)
{
if(dfs(board,word,i,j,0))
{
return true;
}
}
}
return false;
}
private:
int rows; //行数
int lines; //列数
bool dfs(vector<vector<char>>& board,string word,int x,int y,int k)
{
if(x>=rows||x<0||y>=lines||y<0||board[x][y]!=word[k])
{
return false;
}
if(k==word.size()-1)
{
return true;
}
board[x][y]='\0';
int dx[]={-1,0,1,0};
int dy[]={0,1,0,-1};
for(int q=0;q<4;q++)
{
int m=x+dx[q];
int n=y+dy[q];
if(dfs(board,word,m,n,k+1))
{
return true;
}
}
board[x][y]=word[k];
return false;
}
};