回溯法解决力扣79题单词搜索

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/word-search

class Solution {public://方便进行上下左右方向的遍历int dir[4][2]={{1 ,0},{-1,0},{0, 1},{0,-1}};bool exist(vector<vector<char>>& board, string word) {if(board.size()==0)return false;bool find=false;int w=board.size(),h=board[0].size();vector<vector<bool> > arrived(w,vector<bool>(h,false));for(int i=0;i<w;i++){for(int k=0;k<h;k++){//每一个点都有可能是起点backtracking(i,k,arrived,0,word,board,find);}}return find;}void backtracking(int x,int y,vector<vector<bool> > &arrived,int arriv,string &word,vector<vector<char>>& board,bool &find) {//数组必须使用&,避免空间使用过多if(x < 0|| y<0 || x>=board.size() || y>=board[0].size()||arrived[x][y]){return;}if(word[arriv]!=board[x][y]||find)return;//将不满足条件的情况剔除,确认(x,y)可以作为遍历点if(arriv==word.size()-1){find=true;return;}arrived[x][y]=true;//采用回溯法,遍历后设为false,保证其他遍历可以遍历该点for(int i=0;i<4;i++){//对上下左右遍历int x_=x+dir[i][0];int y_=y+dir[i][1];backtracking(x_,y_,arrived,arriv+1,word,board,find);}arrived[x][y]=false;}
};

解析:
对任意位置搜索后,我们需要将该位置标记(arrived[x][y]=true)以防止重复遍历该位置,当该深度搜索完成后,我们再将该位置的标记取消(arrived[x][y]=false)避免干扰。

回溯法解决力扣79题单词搜索相关推荐

  1. 力扣—— 79/212. 单词搜索

    目录 79 单词搜索 212 单词搜索II 79 单词搜索 class Solution(object):#深度搜索def exist(self, board, word):self.flag=0se ...

  2. 力扣算法题—074搜索二维矩阵

    编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: 输入: matrix ...

  3. 力扣刷题记录-动态规划问题总结

    百度百科里对于动态规划问题是这样解释的: 在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果.因此各个阶段 ...

  4. 力扣刷题记录--哈希表相关题目

    当遇到需要快速判断一个元素是否出现在集合里面的时候,可以考虑哈希法,牺牲一定的空间换取查找的时间. java常用的哈希表有HashMap.HashSet以及用数组去模拟哈希,这几种方法各有优劣. 数组 ...

  5. 双指针解决力扣两/三数之和问题

    双指针解决力扣两/三数之和问题 文章目录 双指针解决力扣两/三数之和问题 一.问题描述 二.分析 1.暴力 2.排序+双指针法 3.hash法 三.问题描述 四.分析 方法一:排序 + 双指针 五.代 ...

  6. 回溯法解决部落冲突问题

    回溯法解决部落冲突问题 实验内容 问题描述 思路分析 方法步骤 实验代码 实验内容 原始部落byteland中的居民为了争抢有限的资源,经常发生冲突.几乎每个居民都有它的仇敌.部落酋长为了组织一支保卫 ...

  7. 教你创建电脑、手机同步的markdown云笔记--力扣刷题力荐!

    开篇先致歉 其他不谈,开篇必须先给各位读者道个歉,年后工作上比较忙,加上最近闲暇的时间都用来在力扣上刷算法题了,导致公众号断更有些严重啊.再加上年后将健身减重提上了日程,时间上就更显的捉襟见肘了. 不 ...

  8. 买卖股票的最佳时机——力扣121题

    买卖股票的最佳时机--力扣121题 暴力解法 从前往后,不断将元素之间进行两两比较(类似冒泡排序中),然后不断更新出maxProfit的值.例如数组[7,1,5,3,6,4]中,从7开始,则7 -&g ...

  9. 力扣编程题-解法汇总

    一.力扣链接: 题库 - 力扣 (LeetCode) 全球极客挚爱的技术成长平台 备注:以后每个工作日从前往后刷一道题,然后再加一道每日新题.每天两道题. 二.模版: 标题: 力扣解法汇总5-正则表达 ...

最新文章

  1. Delphi中使用ListView和TreeView的Item中的Data可能被忽略的内存泄漏
  2. Yii中缓存依赖的处理
  3. [Leetcode]@python 90. Subsets II.py
  4. origin 修改水平坐标的刻度
  5. 光电整纬机(日本世联电子株式会社)
  6. 关于数组增减Array 和list的区别
  7. jsoup实现超简单的爬虫
  8. 如何查看win10已激活密钥?查看win10已激活完整密钥的方法!
  9. android 两张电信_双卡双待双核2.3 电信机皇摩托XT882评测
  10. Delphi编程中流的使用
  11. 图像处理学习 灰度图像与二值图像
  12. WPF实现仿Glitch闪烁特效
  13. 文件服务器维修,中国直辖市服务器维修及数据恢复.docx
  14. (转)协议森林10 魔鬼细节 (TCP滑窗管理)
  15. 视频教程-ajax教程 在线视频培训教程(含课程源代码)-JavaScript
  16. 我的世界mod开发(5)做一把无敌的剑
  17. 包装大小与商品价格问题
  18. python计算周长代码_Python计算ci的周长
  19. Reflex WMS入门系列四十:对某个托盘执行上架,系统不能自动建议货架?
  20. 山东大学计算机组成与设计实验六 二进制补码加法器实验

热门文章

  1. 汉马盛况精彩纷呈,健康跑向未来
  2. WPF 控件专题 TextBlock 控件详解
  3. 新丽起危机,免费阅读再进击,内忧外患的阅文如何破局?
  4. 快乐地谈谈:关于RSA算法中求私钥d的欧几里得方法(辗转相除法)考试向的欸
  5. 苹果cms首页文件html,苹果cms安装完不显示首页的解决方法
  6. Commons Email-电子邮件发送
  7. 最简单的基于DirectShow的示例:视频播放器
  8. 26.纯 CSS创作按钮被从纸上掀起的立体效果
  9. MG63骨肉瘤细胞膜包覆纳米载体|U2OS骨肉瘤细胞膜包覆纳米粒
  10. 淘宝API系列(数据结构对象)