当前位置: 首页 > news >正文

思路及解答DFS(深度优先搜索)

深度优先搜索算法,也就是 DFS ,⾸先需要初始化数组,注意是 boolean 类型的⼆元数组。边初始化
边计算位数的和,判断如果⼤于等于阈值的话,就直接置为 true ,也就是已经被访问到(但是这⼀部分计⼊结果)。

然后遍历每⼀个元素,只要 i , j 不在合法的索引范围或者是已经被访问过,都会直接返回
false 。

否则的话,可访问的数量 +1 ,并且递归遍历上下左右四个元素,返回最终的可访问的个数。

DFS 会优先同⼀个⽅向,⼀直⾛下去,不撞南墙不回头,直到条件不满⾜的时候,才会回头。回头之后,每次只会回头⼀步,往另外⼀个⽅向去,同样是⼀头扎进去。

假设有⼀个 4 x 4 的⽅格,从第⼀个开始遍历,假设遍历顺序是上,右,下,左,那么遍历的顺序如下:

java

public class Solution { public int movingCount(int threshold, int rows, int cols) { if (rows > 0 && cols > 0) { boolean[][] visited = new boolean[rows][cols]; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { // 如果⼤于阈值,设置已被访问过 visited[i][j] = ((getSum(i) + getSum(j)) > threshold); } } return getNum(visited, 0, 0, 0); } return 0; } // 获取可以被访问的个数 private int getNum(boolean[][] visited, int i, int j, int count) { if (i < 0 || j < 0 || i >= visited.length || j >= visited[0].length || visited[i][j]) { return count; } count++; visited[i][j] = true; count = getNum(visited, i, j + 1, count); count = getNum(visited, i, j - 1, count); count = getNum(visited, i + 1, j, count); count = getNum(visited, i - 1, j, count); return count; } // 计算位数之和 private int getSum(int num) { int result = 0; while (num > 0) { result = result + num % 10; num = num / 10; } return result; } }
  • 时间复杂度:最坏的情况是将所有的格⼦都遍历⼀遍, O(m*n) 。
  • 空间复杂度:借助了额外的空间保存是否被访问过,同样为O(m*n) 。

BFS(⼴度优先搜索)

⼴度优先搜索,也就是没进⾏⼀步,优先搜索当前点的各个⽅向上的点,不急着往下搜索,等搜索完当前点的各个⽅向的点,再依次把之前搜索的点,取出来,同样先搜索周边的点...

这样直到所有都被搜索完成。

同样有⼀个 4 x 4 的⽅格,从第⼀个开始遍历,假设遍历顺序是上,右,下,左,那么遍历的顺序如下:

在上⾯的过程图示中,我们可以发现,访问是有顺序的,每遍历⼀个新的⽅块,都会标⼀个顺序

http://www.jsqmd.com/news/1100978/

相关文章:

  • 乙游角色争议频上热搜:IP视觉设定如何避免“撞脸”风险?稿定解析原创避坑指南
  • 运维远程协助电脑如何审计:从程序日志、屏幕记录到文件操作
  • 给汽车软件工程师的ASPICE入门指南:从SYS.1到SWE.6,搞懂过程模型到底在管什么
  • 别再死记硬背了!用‘快递中转站’和‘接线员’的比喻,5分钟搞懂AUTOSAR RTE核心
  • YOLOv8从零部署实战:环境配置、数据集准备与模型训练全流程详解
  • 医疗数据分析实战:手把手教你用Minitab分组条形图,一眼看穿不同医院的疗法差异
  • 终极VR视频转换指南:如何将3D沉浸式体验转化为可分享的2D视频
  • Linux 服务器运维指令流程大全:从零开始掌握磁盘、内存与备份
  • 搭建RAG易错点
  • 专业级Windows镜像定制:自动化补丁集成完全手册
  • 别再只盯着西门子了!手把手带你拆解和利时LKS安全PLC的冗余架构与接线
  • Citra 3DS模拟器完整指南:如何在PC上完美运行任天堂经典游戏
  • Qwen3-SmVL技术解析:3步实现中文多模态模型拼接微调实战指南
  • MySQL数据库入门到实战:从SQL基础到事务索引核心操作
  • ARM GICv3中断控制器实战:在树莓派4B上配置中断优先级与路由(含代码示例)
  • 华为ENSP模拟器:手把手教你配置AP无线局域网(保姆级避坑指南)
  • 工厂室内建模-诺斯顿
  • 基于阿里云百炼千问大模型新手入门与实战指南
  • 别再手动画阵列了!HFSS Antenna Design Kit插件实战:5分钟搞定微带天线阵列布局
  • Kazumi插件系统终极指南:如何通过自定义规则打造个性化番剧库
  • 【限时公开】VMware迁移黄金窗口期:仅需17分钟完成TB级虚拟机热迁移(附自动化PowerCLI v12.5脚本+日志解析器)
  • App Store 软件上架完整流程 证书、描述文件、发布的 Windows 操作指南
  • 【小白也能轻松玩转龙虾】虾壳云一键部署实操指南,新手快速完成 OpenClaw v2.7.9 环境配置(附最新安装包)
  • 9块9的合宙ESP32C3简约版到手,用Arduino 2.0.4库搞定USB下载和串口打印(Win10免驱)
  • 快速上手 Pinia!Vue3 极简状态管理使用教程
  • EFR32BG22低功耗实战:手把手教你用Power Manager组件实现EM4休眠与GPIO唤醒
  • 二值神经网络原理与FPGA硬件实现详解
  • XSS跨站脚本攻击:从原理到实战防御的完整指南
  • 最短路径算法工程实现:Dijkstra、SPFA 与 A* 的场景化选型
  • 终极指南:让旧Mac焕发新生!OpenCore Legacy Patcher完全使用教程