记忆化搜索
class Solution {
public:
int dis[4][2]={
{-1,0},
{0,1},
{0,-1},
{1,0}
};
void DFS(vector<vector<char>>& board,int row,int col,string word,int sta,bool& tag,bool vis[])
{
if(sta>=word.size())
{
tag=true;
return;
}
if(tag)
return;
if(word[sta]==board[row][col])
{
if(sta>=word.size()-1)
{
tag=true;
return;
}
for(int i=0;i<4;i++)
{
int x=row+dis[i][0];
int y=col+dis[i][1];
if(x<0||x>=board.size()||y<0||y>=board[0].size())
continue;
if(!vis[x*board[0].size()+y])
{
vis[x*board[0].size()+y]=true;
DFS(board,x,y,word,sta+1,tag,vis);
vis[x*board[0].size()+y]=false;
}
}
}
}
bool exist(vector<vector<char>>& board, string word) {
bool tag=false;
int n=board.size();
if(n==0)
return false;
int m=board[0].size();
int i,j;
for(i=0;i<n&&!tag;i++)
{
for(j=0;j<m&&!tag;j++)
{
bool vis[n*m];
memset(vis,0,sizeof(vis));
vis[i*m+j]=1;
DFS(board,i,j,word,0,tag,vis);
}
}
return tag;
}
};
本文介绍了一种使用记忆化搜索的方法来解决在一个二维字符网格中寻找特定字符串的问题。通过递归深度优先搜索(DFS),结合状态标记,实现了对网格中路径的有效探索。此方法避免了重复搜索已遍历路径,提高了搜索效率。

被折叠的 条评论
为什么被折叠?



