LeetCode 980. 不同路径 III(DFS+回溯)
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+回溯)相关推荐
- LeetCode —— 980. 不同路径 III(Python)
在二维网格 grid 上,有 4 种类型的方格: 1 表示起始方格.且只有一个起始方格. 2 表示结束方格,且只有一个结束方格. 0 表示我们可以走过的空方格. -1 表示我们无法跨越的障碍. 返回在 ...
- 剑指Offer - 面试题12. 矩阵中的路径(DFS回溯)
1. 题目 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左.右.上.下移动一格.如果一条路径经过了矩阵的某一格,那么 ...
- 980. 不同路径 III
在二维网格 grid 上,有 4 种类型的方格: 1 表示起始方格.且只有一个起始方格. 2 表示结束方格,且只有一个结束方格. 0 表示我们可以走过的空方格. -1 表示我们无法跨越的障碍. 返回在 ...
- Leetcode一起攻克搜索(BFS,DFS,回溯,并查集)
文章目录 BFS简介 DFS简介 回溯简介 并查集简介 DFS题目 690. 员工的重要性 1.dfs解法: 2.bfs算法 547.朋友圈 dfs解法 200.岛屿数量 dfs解法 417.太平洋大 ...
- 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 问题,经典又熟悉. 暴力递归->傻 ...
- leetcode 437. Path Sum III | 437. 路径总和 III(DFS,前缀和)
题目 https://leetcode.com/problems/path-sum-iii/ 题解 DFS+前缀和问题,注意节点可能为 0 的情况(也是因此发现应该用 HashMap 记录前缀和的个数 ...
- [DFS|回溯法] leetcode 17 电话号码的字母组合
[DFS|回溯法] leetcode 17 电话号码的字母组合 1.题目 题目链接 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 ...
- c语言中dfs用pos做参数,LeetCode算法练习——深度优先搜索 DFS(2)
更多干货就在我的个人博客 BlackBlog.tech 欢迎关注! 也可以关注我的csdn博客:黑哥的博客 谢谢大家! 我们继续LeetCode之旅. 做了一段时间的LeetCode,感觉还是不错的. ...
- DFS+回溯算法专题
基础知识 回溯法是一种选优搜索法(试探法),被称为通用的解题方法,这种方法适用于解一些组合数相当大的问题.通过剪枝(约束+限界)可以大幅减少解决问题的计算量(搜索量). 深度优先搜索(Depth-Fi ...
最新文章
- win10 ObservableCollection 排序自动收缩问题
- 裕-C#过滤DataTable中的空数据和重复数据
- HappyAA服务器部署笔记1(nginx+tomcat的安装与配置)
- matlab三次多样式对函数拟合,Matlab regress函数拟合多个变量分析
- 再聊如何通过基金定投达到十年十倍?
- 计算机二级c语言上机答案全,计算机二级C语言上机题库答案大全及上机说明
- 西门子 1200PLC全额补贴课程
- 8个优秀的CSS实践,再不刷题就晚了!
- 微信会员卡管理系统会员充值说明
- oracle gbk 无法识别,oracle 字符集总结(超出GBK范围的字符存取问题未解决)
- java读取.doc文件
- 【Day27 文献泛读】物体位置与空间关系的心理表征
- 计算机辅助设计基础试题,CAD基础知识自测题
- 数据驾驶舱只是面子工程?它的真正作用你根本就不了解
- 自动学习——《Learning to Teach》——ICLR2018
- 信奥一本通2071题
- 运算符之 --- 取余运算 %
- SSL 3.0 安全漏洞修复方法
- 2022年中国前10大互联网公司广告营收榜
- 机器人搭建和少儿编程的区别