关于这类给定表格,查找单词问题,思路基本一致。
每个各自有上下左右四个方向,向每个方向搜索的问题。
具体代码如下所示。
class Solution {
public:
bool exist(vector>& board, string word) {
int n=board.size();
int m=board[0].size();
if(board.empty()||word.empty()){return false;} //当数组或者给定单词为空直接返回。
vector>f(n,vector(m,0)); //创建一个数组记录board上对应位置是否被使用过,初始值为0,使用过标记为1
for(int i=0;i>& board,string word,int index,int x,int y,vector>&f){
//当搜索完整个单词,那么返回true.
if(index==word.size()){
return true;
}
if(x<0||x>=board.size()||y<0||y>=board[0].size()||board[x][y]!=word[index]) return false; //如果有越界或者是当前位置不是要搜索的下一个字符,那么直接返回false.
if(f[x][y]==0){ //当前位置是要搜索的字符,那么从这个位置开始搜索下一个字符
f[x][y]=1; //先将这个位置标记为使用过
if(dfs(board,word,index+1,x+1,y,f)||dfs(board,word,index+1,x,y+1,f)||dfs(board,word,index+1,x-1,y,f)||dfs(board,word,index+1,x,y-1,f))
{
return true; //当前位置向四个方向有一个能够走完全程那么返回true
}
f[x][y]=0; //没有一个可以的证明从当前位置出发没有合适的单词,不能标记当前位置,因此复位。
}
return false;
}
};
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)