![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DFS/BFS
的
爱抖腿的嘻嘻嘻
这个作者很懒,什么都没留下…
展开
-
DFS--被包围的区域130
有一个矩阵,其中有x,被x包围的o,没有被x包围的o,要求把所有x包围的o变成x。 则有个相当巧妙的方法是先从边界的o开始dfs,将所有与边界相连或者间接相连的o变成q,最后遍历整个矩阵,所有的o都是不被包围的。 class Solution { int rows; int cols; int[][] s={{1,0},{-1,0},{0,1},{0,-1}}; public void solve(char[][] board) { if(board.leng原创 2021-02-01 17:58:38 · 90 阅读 · 0 评论 -
DFS--机器人的运动范围 剑13
机器人的运动范围 地上有m*n的方格,机器人从0,0开始运动,每次一格,但不能进入行和列各个位置上数的加起来大于k的格子,求机器人可以进入多少个格子。 很明显就是一个回溯法做的题,而且这个题不用考虑在大循环返回,因为就是从0,0开始,把所有都遍历了就可以,所以也就不用循环了。 直接输入0,0开始,如果这个节点边界没有超出而且没有访问过,则看它的获得所有数位的和和给定值的对比,行的话就过,且访问它的周围节点,直到碰到边界返回,将每一个可以用的节点返回1,不能的节点返回0,最后就可以求出所有的可到节点。 pub原创 2020-11-12 18:08:55 · 70 阅读 · 0 评论 -
dfs--单词搜索79
在矩阵中搜索是否存在单词。 这个题可以用dfs来做,要注意的就是在一次路径搜索中,要让已经被选中的为visited中已经被访问过的,这样就不会返回去搜索了,而且如果这个节点失败的话,要记得将它再恢复为没有被访问的状态,因为它可能作为后来的可以选中的字母。 class Solution { int[][] flag={{0,1},{1,0},{-1,0},{0,-1}}; int cols; int rows; char[] c; boolean[][] visited原创 2021-02-01 19:12:07 · 86 阅读 · 0 评论 -
图1.所有可能的路径
有两种表现形式,第一种是邻接矩阵,是一个二维布尔数组,表示节点x和y是否相邻;第二种是临界表,表示每个节点的邻居节点,好处是占用空间少,但缺点是无法快速判断两个节点是否相邻。 遍历图和树一样,只不过因为图可能是有环的,所以需要一个visited数组来表示是否遍历过这个节点,而树直接判断是不是null就可以 dfs(){ 针对这个节点的操作。 判断是否到终点 if(visited[s])return; visited[s]=true; for(TreeNode neighbor:gragh.neighbors原创 2021-03-27 08:38:07 · 291 阅读 · 0 评论 -
BFS1.转盘锁
比如给n是4,k是3,则组合有123或者是124 134 234四种 这是个组合问题,所以剪枝用used 各个分支之间需要剪枝,单个分支也需要剪枝,但不用考虑单个分支有重复值的情况,也不用考虑各个支之间有重复值的情况。 import java.util.ArrayList; import java.util.Stack; class Solution { List<List<Integer>> res=new ArrayList<List<Integer>原创 2021-01-07 19:30:42 · 198 阅读 · 0 评论