1. 题目

在二维网格 grid 上,有 4 种类型的方格:

  • 1 表示起始方格。且只有一个起始方格。
  • 2 表示结束方格,且只有一个结束方格。
  • 0 表示我们可以走过的空方格。
  • -1 表示我们无法跨越的障碍。

返回在四个方向(上、下、左、右)上行走时,从起始方格到结束方格的不同路径的数目,每一个无障碍方格都要通过一次。

提示:1 <= grid.length * grid[0].length <= 20


来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/unique-paths-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. DFS回溯

  • 网格地图之类的DFS套路解题,不难
class Solution {int sx,sy,ex,ey;//起点终点坐标int m,n,steps = 0;vector<vector<int>> dir = {{-1,0},{1,0},{0,1},{0,-1}};
public:int uniquePathsIII(vector<vector<int>>& grid) {int i, j;m = grid.size(), n = grid[0].size();for(i = 0; i < m; ++i)for(j = 0; j < n; ++j){if(grid[i][j] != -1)steps++;//计算需要走的格子数if(grid[i][j] == 1)sx = i, sy = j;//起点else if(grid[i][j] == 2)ex = i, ey = j;//终点}int paths = 0;grid[sx][sy] = -1;//起点标记走过了dfs(grid, sx, sy, 1, paths);return paths;}void dfs(vector<vector<int>>& grid, int x, int y, int step, int &paths) {if(x == ex && y == ey)//终点{if(step == steps)//走过所有的地方paths++;//方案+1return;}int x0, y0, origin;for(int k = 0; k < 4; ++k){x0 = x+dir[k][0];y0 = y+dir[k][1];//周围四个方向坐标if(x0 >= 0 && x0 < m && y0 >= 0 && y0 < n && grid[x0][y0] != -1){    //坐标未出界,且没有访问过origin = grid[x0][y0];//位置原始信息grid[x0][y0] = -1;//访问过了dfs(grid,x0,y0,step+1,paths);//dfsgrid[x0][y0] = origin;//回溯,恢复现场}}}
};

LeetCode 980. 不同路径 III(DFS+回溯)相关推荐

  1. LeetCode —— 980. 不同路径 III(Python)

    在二维网格 grid 上,有 4 种类型的方格: 1 表示起始方格.且只有一个起始方格. 2 表示结束方格,且只有一个结束方格. 0 表示我们可以走过的空方格. -1 表示我们无法跨越的障碍. 返回在 ...

  2. 剑指Offer - 面试题12. 矩阵中的路径(DFS回溯)

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

  3. 980. 不同路径 III

    在二维网格 grid 上,有 4 种类型的方格: 1 表示起始方格.且只有一个起始方格. 2 表示结束方格,且只有一个结束方格. 0 表示我们可以走过的空方格. -1 表示我们无法跨越的障碍. 返回在 ...

  4. Leetcode一起攻克搜索(BFS,DFS,回溯,并查集)

    文章目录 BFS简介 DFS简介 回溯简介 并查集简介 DFS题目 690. 员工的重要性 1.dfs解法: 2.bfs算法 547.朋友圈 dfs解法 200.岛屿数量 dfs解法 417.太平洋大 ...

  5. leetcode 62, 63, 980. Unique Paths I, II, III | 62, 63, 980. 不同路径 I, II, III(暴力递归->傻缓存->动态规划)

    62. Unique Paths https://leetcode.com/problems/unique-paths/ 注意本题只能向右 / 向上走. DP 问题,经典又熟悉. 暴力递归->傻 ...

  6. leetcode 437. Path Sum III | 437. 路径总和 III(DFS,前缀和)

    题目 https://leetcode.com/problems/path-sum-iii/ 题解 DFS+前缀和问题,注意节点可能为 0 的情况(也是因此发现应该用 HashMap 记录前缀和的个数 ...

  7. [DFS|回溯法] leetcode 17 电话号码的字母组合

    [DFS|回溯法] leetcode 17 电话号码的字母组合 1.题目 题目链接 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 ...

  8. c语言中dfs用pos做参数,LeetCode算法练习——深度优先搜索 DFS(2)

    更多干货就在我的个人博客 BlackBlog.tech 欢迎关注! 也可以关注我的csdn博客:黑哥的博客 谢谢大家! 我们继续LeetCode之旅. 做了一段时间的LeetCode,感觉还是不错的. ...

  9. DFS+回溯算法专题

    基础知识 回溯法是一种选优搜索法(试探法),被称为通用的解题方法,这种方法适用于解一些组合数相当大的问题.通过剪枝(约束+限界)可以大幅减少解决问题的计算量(搜索量). 深度优先搜索(Depth-Fi ...

最新文章

  1. win10 ObservableCollection 排序自动收缩问题
  2. 裕-C#过滤DataTable中的空数据和重复数据
  3. HappyAA服务器部署笔记1(nginx+tomcat的安装与配置)
  4. matlab三次多样式对函数拟合,Matlab regress函数拟合多个变量分析
  5. 再聊如何通过基金定投达到十年十倍?
  6. 计算机二级c语言上机答案全,计算机二级C语言上机题库答案大全及上机说明
  7. 西门子 1200PLC全额补贴课程
  8. 8个优秀的CSS实践,再不刷题就晚了!
  9. 微信会员卡管理系统会员充值说明
  10. oracle gbk 无法识别,oracle 字符集总结(超出GBK范围的字符存取问题未解决)
  11. java读取.doc文件
  12. 【Day27 文献泛读】物体位置与空间关系的心理表征
  13. 计算机辅助设计基础试题,CAD基础知识自测题
  14. 数据驾驶舱只是面子工程?它的真正作用你根本就不了解
  15. 自动学习——《Learning to Teach》——ICLR2018
  16. 信奥一本通2071题
  17. 运算符之 --- 取余运算 %
  18. SSL 3.0 安全漏洞修复方法
  19. 2022年中国前10大互联网公司广告营收榜
  20. 机器人搭建和少儿编程的区别

热门文章

  1. 选择排序 冒泡排序 二分查找
  2. C++远航之封装篇——构造函数
  3. 新高考不选物理可以学计算机吗,新高考选科中物理真的那么重要吗?没有选物理是不是完了?...
  4. 动态路由选择协议(二)距离矢量路由选择协议
  5. linux内核同步机制相关收集
  6. ATS push cache 测试
  7. LevelDb实现原理
  8. 二分法查找(C/C++)
  9. 找不到问题的核心,你永远解决不了问题。
  10. CPU,内核,寄存器,缓存,RAM,ROM的知识