如何优化360网站排名,加强二级教育网站的招生效果?
摘要:如何做360网站的排名,加强二级网站建设 招生,外贸网上推广,网站的配色技巧最近在刷力扣时遇见的问题,自己总结加上看了力扣大佬的知识总结写下本篇文章,我们所熟悉的 DFS&
如何做360网站的排名,加强二级网站建设 招生,外贸网上推广,网站的配色技巧最近在刷力扣时遇见的问题#xff0c;自己总结加上看了力扣大佬的知识总结写下本篇文章#xff0c;我们所熟悉的 DFS#xff08;深度优先搜索#xff09;问题通常是在树或者图结构上进行的。而我们今天要讨论的 DFS 问题#xff0c;是在一种「网格」结构中进行的。岛屿问题…
最近在刷力扣时遇见的问题自己总结加上看了力扣大佬的知识总结写下本篇文章我们所熟悉的 DFS深度优先搜索问题通常是在树或者图结构上进行的。而我们今天要讨论的 DFS 问题是在一种「网格」结构中进行的。岛屿问题是这类网格 DFS 问题的典型代表。网格结构遍历起来要比二叉树复杂一些如果没有掌握一定的方法DFS 代码容易写得冗长繁杂。 目录 一、网格类问题的DFS遍历方法 1.1网格问题基本概念 1.2 DFS的基本结构 1.3 如何避免重复遍历 二、岛屿经典例题 2.1 岛屿数量 2.2 岛屿的周长 2.3 单词搜索 一、网格类问题的DFS遍历方法 1.1网格问题基本概念 网格问题是由 m×n 个小方格组成一个网格每个小方格与其上下左右四个方格认为是相邻的要在这样的网格上进行某种搜索。岛屿问题是一类典型的网格问题。每个格子中的数字可能是 0 或者 1。 数字为1的格子连接起来就形成一个岛屿。 1.2 DFS的基本结构 首先我们要确定访问的下一个节点以及停止的边界那么首先网格结构中的每个格子可以向四周延伸分别为上下左右对于格子(r,c)来说对应的四个坐标分别为(r1,c)、(r-1,c)、(r,c-1)、(r,c1)。 其次超出格子的边界是什么?是grid[r][c]出现下标越界异常的格子也就是那些超出范围的格子。 这样我们就得到了网格DFS遍历的框架代码 public void infect(char[][] grid,int i ,int j){
//超出范围if (i 0 || i grid.length || j 0 || j grid[0].length){return;}
//访问上下左右infect(grid,i1,j);infect(grid,i-1,j);infect(grid,i,j1);infect(grid,i,j-1);
}
1.3 如何避免重复遍历 网格结构的 DFS 与二叉树的 DFS 最大的不同之处在于遍历中可能遇到遍历过的结点。这是因为网格结构本质上是一个「图」我们可以把每个格子看成图中的结点每个结点有向上下左右的四条边。在图中遍历时自然可能遇到重复遍历结点。 如何避免这样的重复遍历呢答案是将已经遍历过的格子的值修改一下每次走过一个格子就修改格子的值。以岛屿问题为例我们需要在所有值为 1 的陆地格子上做 DFS 遍历。每走过一个陆地格子就把格子的值改为 2这样当我们遇到 2 的时候就知道这是遍历过的格子了。
