剑指Offer12-矩阵中的路径 题目描述

思路分析

显然这是一个深度优先搜索的题,遍历整个矩阵寻找word的首字母,然后对首字母位置的上下左右四个方向进行延展,判断第二个字母是否存在,依此方法直到找到整个word字符串,即为true。为了避免重复遍历某个位置,在一条分支走过该位置时将其置为数字等不影响的字符作为标记,由于不同分支互不影响,所以在该分支结束时需要将标记恢复。

代码

bool exist(vector<vector<char>>& board, string word) {int row = board.size(), col = board[0].size();for (int i = 0; i < row; ++i) {for (int j = 0; j < col; ++j) {if (dfs(i, j, board, word, 0)) {return true;}}}return false;
}
bool dfs(int i, int j, vector<vector<char>>& board, string word, int wordIndex) {int row = board.size(), col = board[0].size();if (wordIndex == word.size()) {return true;}if (i < 0 || i >= row || j < 0 || j >= col) {return false;}bool res = false;if (board[i][j] == word[wordIndex]) {board[i][j] = '1';//标记走过的分支res = dfs(i + 1, j, board, word, wordIndex + 1) || dfs(i - 1, j, board, word, wordIndex + 1) || dfs(i, j + 1, board, word, wordIndex + 1) || dfs(i, j - 1, board, word, wordIndex + 1);board[i][j] = word[wordIndex];//将标记恢复}return res;
}

剑指Offer13-机器人的运动范围径 题目描述

思路分析

因为是找到所有可达到的方格,所以可以用深度优先和广度优先进行搜索。使用深度优先与上题步骤基本一样,只是判定满足要求的条件不同,并且每个符号要求的方格只记录一次,所以标记过方格后无需恢复。

代码

    int movingCount(int m, int n, int k) {vector<vector<int>> signedMap(m, vector<int>(n));int count = 0;moveOne(m, n, signedMap, 0, 0, count, k);return count;}//深度优先搜索void moveOne(int m, int n, vector<vector<int>>& signedMap, int x, int y, int& count, int k){if(x < 0 || x >= m || y < 0 || y >= n || signedMap[x][y] != 0 || (getSum(x) + getSum(y) > k)){return;}count++;signedMap[x][y] = -1;moveOne(m, n, signedMap, x - 1, y, count, k);moveOne(m, n, signedMap, x + 1, y, count, k);moveOne(m, n, signedMap, x, y - 1, count, k);moveOne(m, n, signedMap, x, y + 1, count, k);}//计算数字的数位之和int getSum(int number){int sum = 0;while(number != 0){sum += number % 10;number = int(number / 10);}return sum;}

个人博客

深度优先搜索(解题剑指Offer12、13)相关推荐

  1. 剑指 Offer 13. 机器人的运动范围

    剑指 Offer 13. 机器人的运动范围 题目 ​ 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] .一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左.右.上 ...

  2. LeetCode 剑指Offer 13 机器人的运动范围

    LeetCode 剑指Offer 13 机器人的运动范围 题目 解题 解题一:深度优先搜索 解题二:广度优先搜索 解题三:动态规划 题目 解题 深度优先和广度优先解题思路参考: 剑指 Offer 13 ...

  3. 【LeetCode】剑指 Offer 13. 机器人的运动范围

    [LeetCode]剑指 Offer 13. 机器人的运动范围 文章目录 [LeetCode]剑指 Offer 13. 机器人的运动范围 package offer;public class Solu ...

  4. [[EVD]] - 剑指 Offer 13. 机器人的运动范围

    题目分析:[[EVD]] - 剑指 Offer 13. 机器人的运动范围https://leetcode-cn.com/problems/ji-qi-ren-de-yun-dong-fan-wei-l ...

  5. 【四重优化,速看】剑指 Offer 13. 机器人的运动范围

    立志用最少的代码做最高效的表达 题目 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] .一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左.右.上.下移动一格(不 ...

  6. Leetcode刷题笔记——剑指 Offer 13. 机器人的运动范围(中等)

    文章目录 题目描述 解题思路 方法一:深度优先遍历DFS 复杂度分析 C++代码实现 方法二:广度优先遍历BFS 复杂度分析 C++代码实现 参考连接 题目描述 地上有一个m行n列的方格,从坐标 [0 ...

  7. 剑指Offer #13 调整数组顺序使奇数位于偶数前面 | 图文详解

    题目来源:牛客网-剑指Offer专题 题目地址:调整数组顺序使奇数位于偶数前面 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的 ...

  8. 剑指Offer-12:矩阵中的路径

    题目: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵中的 ...

  9. 剑指 Offer 13: 机器人的运动范围

    这道题第一反应就是使用深度优先算法,需要先想好怎么 别忘了正确写法,没有创建新空间怎么给这两个数字存进去呢! 这里前面对导致判断后面!!越界,千万小心 深度优先搜索就是利用栈的思想,先进后出,递归调用 ...

最新文章

  1. javah生成JNI头文件
  2. 机器人进攻民用市场:踏实做好小优美
  3. 【指标统计】本区或跨区取WEB统计指标配置方法
  4. 283. Move Zeroes(数组篇)
  5. echo中使用逗号和句号的区别
  6. Hibernate一对多映射示例注释
  7. java的实现内部类实现链表
  8. IOS端与Java端MD5加密方法
  9. let的解构赋值_前端开发es6知识 模块化、解构赋值、字符串模板
  10. DMSP/OLS夜间灯光数据
  11. 全球各国语言代码缩写与国家对照表
  12. 淘宝,京东,苏宁易购技术架构(路线)分析和比较
  13. 恒压板框过滤实验数据处理_陕西延安GPJ120配件设备,陕西加压过滤机改造
  14. 通过python调用海康威视工业摄像头并进行图像存储,同时使用opencv实时图像显示(数据流问题已解决)
  15. 虚幻引擎学习笔记——Month1 Week3
  16. 记一次IOS与H5-SPA页面的交互经验
  17. DGIOT国内首家轻量级物联网开源平台——支持工业设备租赁以及远程管控
  18. Windows11来了,第一个适用于Windows 11的Insider Preview
  19. eclipse-美化插件
  20. Java实现延时的方法

热门文章

  1. 又是绩效考核时,KPI 和 OKR 到底怎么考?
  2. First C program
  3. MYSQL数据库安装记
  4. 安装VISTA我们应该选择哪种
  5. msmq发送速度的测试
  6. jquery form java_springmvc利用jquery.form插件异步上传文件示例
  7. linux网络通信移植,基于socket API的C/S通信:将Qt程序从Linux移植到windows
  8. mysql noinstall 5.5_安装配置MYSQL5.5
  9. 信息学奥赛一本通 2070:【例2.13】数字对调
  10. 信息学奥赛一本通 1087:级数求和 | 1918:【02NOIP普及组】级数求和 | OpenJudge NOI 1.5 27