当前位置:   article > 正文

力扣刷题:单词搜索(C++实现)——记忆回溯方法_单词记忆源代码

单词记忆源代码

 

 关于这类给定表格,查找单词问题,思路基本一致。每个各自有上下左右四个方向,向每个方向搜索的问题。具体代码如下所示。

  1. class Solution {
  2. public:
  3. bool exist(vector<vector<char>>& board, string word) {
  4. int n=board.size();
  5. int m=board[0].size();
  6. if(board.empty()||word.empty()){return false;} //当数组或者给定单词为空直接返回。
  7. vector<vector<int>>f(n,vector<int>(m,0)); //创建一个数组记录board上对应位置是否被使用过,初始值为0,使用过标记为1
  8. for(int i=0;i<n;i++)
  9. {
  10. for(int j=0;j<m;j++){
  11. if(dfs(board,word,0,i,j,f))
  12. return true;
  13. }
  14. }
  15. return false;
  16. }
  17. bool dfs(vector<vector<char>>& board,string word,int index,int x,int y,vector<vector<int>>&f){
  18. //当搜索完整个单词,那么返回true.
  19. if(index==word.size()){
  20. return true;
  21. }
  22. if(x<0||x>=board.size()||y<0||y>=board[0].size()||board[x][y]!=word[index]) return false; //如果有越界或者是当前位置不是要搜索的下一个字符,那么直接返回false.
  23. if(f[x][y]==0){ //当前位置是要搜索的字符,那么从这个位置开始搜索下一个字符
  24. f[x][y]=1; //先将这个位置标记为使用过
  25. 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))
  26. {
  27. return true; //当前位置向四个方向有一个能够走完全程那么返回true
  28. }
  29. f[x][y]=0; //没有一个可以的证明从当前位置出发没有合适的单词,不能标记当前位置,因此复位。
  30. }
  31. return false;
  32. }
  33. };

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/590412
推荐阅读
相关标签
  

闽ICP备14008679号