搜索算法------深度优先搜索

1. 介绍

深度优先搜索(Depth-First Search,DFS)是一种用于遍历或搜索树或图的算法。这种算法通过尽可能深地搜索图的分支来探索解决方案空间,直到达到一个没有分支的点,然后回溯

1.1 原理

  1. 选择起始点:从图中的某个顶点开始
  2. 探索分支:沿着一条路径尽可能深地探索,直到到达一个没有未探索邻接点的顶点
  3. 回溯:当无法进一步深入时,回溯到上一个顶点,探索其他未探索的分支
  4. 重复:重复上述过程,直到所有顶点都被访问过

比如下图是一颗简单的树:
在这里插入图片描述
首先我们从1开始,沿着最左边的路径探索,于是首先找到了2这个节点,然后再深入,找到了3,3后面没有节点了,于是回溯到2,再向右找到了4,4后面没有节点,再回溯到2,2的节点都已探索结束,于是返回1,由1开始继续向右探索,找到了6,然后从6开始找到了7,7后面没有节点,回溯到6,6后面也没有节点,回溯到1,1也没有其他节点,于是探索结束。所以这颗树的深度优先搜索结果就为123467.

2. 题目

在这里插入图片描述

3. 思路和题解

这道题其实就可以用DFS来求解,当我们对这个二维数组进行遍历时,对于每一块土地,就是通过上面所描述的原理,去尽可能深的寻找前后左右有土地的地方,如果没有土地了,则进行回溯,以此类推,直到寻找结束。
当我们在寻找的时候,如果这块土地已经找过了,为了避免重复计算,我们将其置为0,然后最后取所有岛屿的最大值即可。
代码如下:

class Solution {public int maxAreaOfIsland(int[][] grid) {if (grid == null || grid.length == 0) {return 0;}int nr = grid.length;int nc = grid[0].length;int ans = 0 ;for(int r = 0; r < nr;r++){for(int c = 0;c < nc;c++){if(grid[r][c] == 1){ans = Math.max(ans,dfs(grid,r,c));}}}return ans;}public int dfs(int[][] grid,int r,int c){int nr = grid.length;int nc = grid[0].length;int ans = 0;if(r < 0 || c < 0 || r >= nr || c >= nc || grid[r][c] == 0){return 0;}grid[r][c] = 0;ans++;ans = ans +dfs(grid,r-1,c);ans = ans +dfs(grid,r+1,c);ans = ans +dfs(grid,r,c-1);ans = ans +dfs(grid,r,c+1);return ans;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/75203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4.2 单相机引导机器人放料-仅考虑角度变化

【案例说明】 本案例产品在托盘中,角度变化不大(<15度);抓取没有问题,只是放的穴位只能容许3度的角度偏差,因此需要测量产品的角度。 思路是:机器人抓料后、去固定拍照位拍照(找到与标准照片的角度偏差),机器人在放料的位置上多旋转这个角度偏差,把产品放进去。 …

六级词汇量积累day13

commend 表扬 exhaust 耗尽&#xff0c;用尽 weary 疲惫的&#xff0c;劳累的 fatigue 疲惫&#xff0c;劳累 obese 臃肿的&#xff0c;肥胖的 adopt 采纳&#xff0c;收养 adapt 适应 accomplish 完成&#xff0c;实现 accomplishment 成就 achieve 实现&#xff0c;完成 achi…

医院信息系统与AI赋能的介绍

随着医疗行业的不断发展&#xff0c;医院信息系统&#xff08;HIS&#xff0c;Hospital Information System&#xff09;已经成为现代医疗服务不可或缺的一部分。医院信息系统通过数字化、信息化手段&#xff0c;有效地整合了医院内部的医疗、财务、后勤等各个业务环节&#xf…

突发,国行 iPhone 17,支持 eSIM

古人云“无心生大用”&#xff0c;往往你感到绝望的时候&#xff0c;转机就莫名其妙的来了。 根据供应链的最新消息&#xff0c;国行 iPhone 17 Air&#xff0c;有望用上 eSIM。 不仅如此&#xff0c;国产手机厂商&#xff0c;也计划推出类似iPhone 17 Air的超薄机型&#xf…

【C++项目】从零实现RPC框架「三」:项⽬抽象层实现

🌈 个人主页:Zfox_ 🔥 系列专栏:C++从入门到精通 目录 一:🔥 常⽤的零碎功能接⼝类实现🦋 简单⽇志宏实现🦋 Json 序列化/反序列化🦋 UUID ⽣成二:🔥 项⽬消息类型字段信息定义 🦋 请求字段宏定义🦋 消息类型定义🦋 响应码类型定义🦋 RPC 请求类型定…

Hadoop集群常用指令详解

在大数据处理领域&#xff0c;Hadoop作为分布式计算和存储的开源框架&#xff0c;已经成为不可或缺的工具。掌握Hadoop集群的常用指令对于集群的日常管理和操作至关重要。本文将详细介绍Hadoop集群的常用指令&#xff0c;帮助读者更好地理解和使用Hadoop。 一、Hadoop集群的启…

几种常见的.NET单元测试模拟框架介绍

目录 1. Moq 2. NSubstitute 3. AutoFixture 4. FakeItEasy 总结对比 单元测试模拟框架是一种在软件开发中用于辅助单元测试的工具。 它的主要作用是创建模拟对象来替代真实对象进行测试。在单元测试中&#xff0c;被测试的代码可能依赖于其他组件或服务&#xff0c;如数…

蓝桥杯备赛之枚举

用循环等方式依次去枚举所有的数字组合&#xff0c;一一验证是否符合题目的要求 题目链接 0好数 - 蓝桥云课 题目解析 好数的概念: 数的奇数位位奇数,偶数位为偶数,就是一个好数 求输入n里面有多少个好数 题目原理 1> 遍历每个数 2> 每次遍历判断是不是好数 把这…

9、tlm 事务交互通信

1、TLM&#xff08;Transaction-Level Modeling&#xff09; 是 SystemC 的高级建模方法&#xff0c;用于描述系统的通信行为&#xff0c;特别是在硬件设计和验证中。TLM 是 SystemC 的一部分&#xff0c;用于提高仿真的效率和抽象性。以下是 TLM 的核心知识以及关键概念。 2、…

小白入门机器学习概述

文章目录 一、引言二、机器学习的基础概念1. 机器学习的定义2. 机器学习的类型&#xff08;1&#xff09;监督学习&#xff08;Supervised Learning&#xff09;&#xff08;2&#xff09;无监督学习&#xff08;Unsupervised Learning&#xff09;&#xff08;3&#xff09;半…

smartdns 在企业场景中的应用心得

smartdns 是一款优秀的本地dns服务器&#xff0c;默认开启的配置在小型环境下足够使用(50台终端)&#xff0c;在面对中大型网络环境时&#xff08;100台终端&#xff0c;且有多层网络结构&#xff09;&#xff0c;需要增加更多的配置来确保稳定运行。 一、删除注释&#xff0c;…

【12】Ajax的原理和解析

一、前言 二、什么是Ajax 三、Ajax的基本原理 3.1 发送请求 3.2 解析内容 3.3 渲染网页 3.4 总结 四、Ajax 分析 五、过滤请求-筛选所有Ajax请求 一、前言 当我们在用 requests 抓取页面的时候&#xff0c;得到的结果可能会和在浏览器中看到的不一样&a…

【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的安全性:使用 Spring Security 实现认证与授权

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、开篇整…

百元不入耳蓝牙耳机哪个品牌好用?2025百元不入耳耳机品牌推荐

在选择蓝牙耳机时&#xff0c;许多用户开始关注不入耳式设计&#xff0c;不仅能避免耳道不适&#xff0c;还能保持对环境音的感知&#xff0c;提升运动、通勤或日常使用的安全性。而在百元价位中&#xff0c;不入耳式耳机的品牌众多&#xff0c;产品质量参差不齐&#xff0c;如…

如何加强 SSH 安全:内网和专用网络环境下的防护策略

文章目录 如何加强 SSH 安全&#xff1a;内网和专用网络环境下的防护策略限制访问来源通过防火墙或安全组限制网络策略&#xff08;Network Policy&#xff09; 禁用密码登录&#xff0c;使用密钥认证启用 Fail2ban 或 SSH 防爆破限制 SSH 用户更改 SSH 端口使用跳板机&#xf…

ngx_monotonic_time

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_monotonic_time函数-CSDN博客 定义在 src\core\ngx_times.c static ngx_msec_t ngx_monotonic_time(time_t sec, ngx_uint_t msec) { #if (NGX_HAVE_CLOCK_MONOTONIC)struct timespec ts;#if defined(CLOCK_MONOTONIC_FAST)clock_get…

【Trick】论文画图的icon来源

0&#xff1a;起因 群友在群里发了这种很好看的论文主图 其中不乏有很多icon&#xff0c;比如open-ai、机器人的 于是想知道应该如何找到&#xff0c;便有了后文 1&#xff1a;网址 阿里巴巴矢量图标库&#xff1a;iconfont-阿里巴巴矢量图标库 2&#xff1a;使用方法 可…

前端 技术栈

前端 技术栈 ChatGPT 说&#xff1a; 好咧&#xff0c;说到前端技术栈&#xff0c;这一块现在确实百花齐放&#xff0c;有点卷&#xff0c;但也超灵活。下面我来给你梳理一套2025年主流、实用、好上手的前端技术栈组合&#xff0c;按层级分类&#xff0c;一目了然&#xff1a;…

vue3 根据城市名称计算城市之间的距离

<template><div class"distance-calculator"><h1>城市距离计算器</h1><!-- 城市输入框 --><div class"input-group"><inputv-model"city1"placeholder"请输入第一个城市"keyup.enter"cal…

Java安全-FastJson反序列化分析

FastJson介绍 Fastjson 是阿里巴巴推出的一款高性能 JSON 序列化/反序列化库&#xff0c;由于其便捷性被广泛应用于 Java 项目中 FastJson使用 package org.example;import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject;public class FastjsonDemo {…