来源

深度优先搜索算法:(DFS)

是一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。属于盲目搜索。

其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。

该图的遍历顺序为(默认为左子树优先遍历):1、2、3、4、5、6、7、8、9。

广度优先搜索(BFS)

属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。基本过程,BFS是从根节点开始,沿着树(图)的宽度遍历树(图)的节点。如果所有节点均被访问,则算法中止。一般用队列数据结构来辅助实现BFS算法。

基本步骤:

从v1开始,搜索v2,v3,v4,重复搜索操作直到v7,最短路径为1-4-7。


 来源:力扣(LeetCode)

有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。

给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newColor,让你重新上色这幅图像。

为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的相连像素点,接着再记录这四个方向上符合条件的像素点与他们对应四个方向上像素值与初始坐标相同的相连像素点,……,重复该过程。将所有有记录的像素点的颜色值改为新的颜色值。

最后返回经过上色渲染后的图像。


示例 :

输入:
image = [[1,1,1],[1,1,0],[1,0,1]]
sr = 1, sc = 1, newColor = 2
输出: [[2,2,2],[2,2,0],[2,0,1]]
解析:
在图像的正中间,(坐标(sr,sc)=(1,1)),
在路径上所有符合条件的像素点的颜色都被更改成2。
注意,右下角的像素没有更改为2,
因为它不是在上下左右四个方向上与初始点相连的像素点。


 int[] dx = {1, 0, 0, -1};int[] dy = {0, 1, -1, 0};public int[][] floodFill(int[][] image, int sr, int sc, int newColor) {int currColor = image[sr][sc];if (currColor != newColor) {dfs(image, sr, sc, currColor, newColor);}return image;}public void dfs(int[][] image, int x, int y, int color, int newColor) {if (image[x][y] == color) {image[x][y] = newColor;for (int i = 0; i < 4; i++) {int mx = x + dx[i], my = y + dy[i];if (mx >= 0 && mx < image.length && my >= 0 && my < image[0].length) {dfs(image, mx, my, color, newColor);}}}}

递归的方法搭配深度优先算法,对该点的上下左右点进行遍历讨论。

定义的两个数组用于方向操作。


给你一个大小为 m x n 的二进制矩阵 grid 。

岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。

岛屿的面积是岛上值为 1 的单元格的数目。

计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。


public class Test_02 {public int maxAreaOfIsland(int[][] grid) {int ans = 0;for (int i = 0; i != grid.length; ++i) {for (int j = 0; j != grid[0].length; ++j) {ans = Math.max(ans, dfs(grid, i, j));}}return ans;}public int dfs(int[][] grid, int cur_i, int cur_j) {if (cur_i < 0 || cur_j < 0 || cur_i == grid.length || cur_j == grid[0].length || grid[cur_i][cur_j] != 1) {return 0;}grid[cur_i][cur_j] = 0;int[] di = {0, 0, 1, -1};int[] dj = {1, -1, 0, 0};int ans = 1;for (int index = 0; index != 4; ++index) {int next_i = cur_i + di[index], next_j = cur_j + dj[index];ans += dfs(grid, next_i, next_j);}return ans;}}

深度优先搜索配合递归。遍历所有点,找到值为一的点,调用深度优先搜索,对其周围的点进行递归遍历,如一点计算完面积后,为了防止面积重复计算,将面积赋值为0。

深度优先搜索/广度优先搜索相关推荐

  1. 6.1 图的深度优先和广度优先搜索

    图的广度优先搜索 图的的搜索算法主要分为广度优先搜索(breadth-first search或BFS)和深度优先搜索(depth-first search或DFS).首先讨论广度优先搜索算法. 称之 ...

  2. 图的遍历——深度优先搜索+广度优先搜索

    一:图的遍历--深度优先搜索 在本文其他内容中只是大体概括了主要的图论内容,更加详细的代码实现及算法分析在此给出. 深度优先搜索(DFS)类似树的先序遍历. 假设初始状态是图中所有顶点未曾被访问,则深 ...

  3. Python 实现图的深度优先和广度优先搜索

    在介绍 python 实现图的深度优先和广度优先搜索前,我们先来了解下什么是"图". 1 一些定义 顶点 顶点(也称为"节点")是图的基本部分.它可以有一个名称 ...

  4. 邻接矩阵的深度优先和广度优先搜索

    c语言中图的邻接矩阵的深度优先和广度优先搜索 #include<stdio.h> #include<stdlib.h> typedef struct {int vexs[7]; ...

  5. 深度优先和广度优先搜索

    目录 前言 1 深度优先搜索 2 广度优先搜索 3 深度优先和广度优先的比较 前言 最近面试,被问到了深度优先和广度优先搜索,这个我似曾相识,曾经大学的时候学到过,但是由于这几年的工作都未接触到,所以 ...

  6. 深度优先搜索 广度优先搜索理解

    深度优先搜索广度优先搜索 1. 什么是 "搜索" 算法 我们知道,算法都是作用于某种具体的数据结构上的,而深度优先搜索算法和广度优先搜索算法就是作用于图这种数据结构的. 图上的搜索 ...

  7. 深度优先搜索广度优先搜索

    1 概述 算法是作用于具体的数据结构之上的,深度优先搜索算法和广度优先搜索算法都是基于图这种数据结构的.主要原因是因为图的这种数据结构表达能力很强,大部分涉及搜索的场景都可以抽象成图. 图上的搜索算法 ...

  8. networkx 有向图强连通_leetcode刷题(四):搜索(深度优先搜索,广度优先搜索)拓扑排序,强连通分量...

    在开始今天的话题之前,我们先了解一个概念,什么是图的遍历? 图的遍历就是从图中某一点出发访遍图中其余剩余定点,且每个顶点仅被访问一次,这个过程叫做图的遍历. 图的遍历主要被分为深度优先遍历和广度优先遍 ...

  9. 根据邻接表求深度优先搜索和广度优先搜索_深度优先搜索/广度优先搜索与java的实现...

    度:某个顶点的度就是依附于该顶点的边的个数 子图:一幅图中所有边(包含依附边的顶点)的子集 路径:是由边顺序连接的一系列定点组成 环:至少含有一条边且终点和起点相同的路径 连通图:如果图中任一个到另一 ...

最新文章

  1. php 多条数据更新数据类型,PHPdoc @param中的两个或多个数据类型
  2. php倒序分页重复,时间倒序分页查询,翻页中有新增的数据插入db,导致返回重复数据,这个有什么好的解决办法没?谢谢大家...
  3. response html 页面,使用response将html拼接页面写到当前浏览器端完成自动提交功能...
  4. python中打印二维列表数据
  5. intel lock汇编指令保障有序性
  6. 第二章 Java基本语法(三)
  7. 使用Hadoop自带的例子pi计算圆周率
  8. 【OpenCV 例程200篇】26. 图像的旋转(以原点为中心)
  9. 350个特性看透ES6
  10. 最流行的自动化测试工具,总有一款适合你
  11. python基础学习笔记4--抽象
  12. python——迭代器itertools.cycle
  13. C语言中的system函数参数详解
  14. oracle--索引的使用
  15. 【HAVENT原创】修改 CentOS 服务器名称
  16. html 加号按钮变减号,带有javascript附加输入的加号/减号按钮
  17. Python全年天数查询源代码
  18. 注意|莫让“爬虫”变“害虫”
  19. 文件共享服务器onedrive,共享 OneDrive 文件和文件夹
  20. js将数字金额转换为大写人民币

热门文章

  1. 《图像处理、分析与机器视觉 第四版》 摄像机 相机概述——学习笔记
  2. vue-cli 3 和 vue-cli 2的区别[转]
  3. VR全景有什么应用,和传统摄影的区别,发展前景如何?
  4. 一堆Offer怎么选?这样做就不纠结了
  5. Optimized Cost per Click in Taobao Display Advertising - 淘宝 OCPC 阅读笔记
  6. win11安装wsl2
  7. 实验记录 | 为什么mtDNA的fastq数据会比对到常染色体上?
  8. Ubuntu安装音频编辑软件Audacity
  9. 这些MOS管的特点和分类,你未必全都知道
  10. 记录一次修复知网学位论文目录下载油猴脚本的过程