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

BFS算法的学习

一. 介绍

广度优先搜索

二. 模板

距离版:用于获取起点到达每个节点的最小距离

/** @description  bfs搜索其他点到某个点的最短路径* @param: p* @param: start* @returns int* @author yamu* @date 2025/5/8 15:23*/public int[] bfs(List<Integer>[] p, int start) {int n = p.length;int[] dist = new int[n];Arrays.fill(dist, -1);//表示不可达Deque<Integer> deque = new ArrayDeque<>();dist[start] = 0;//起点deque.add(start);while (!deque.isEmpty()) {int cur = deque.poll();for (int sub_p : p[cur]) {if (dist[sub_p] == -1) {dist[sub_p] = dist[cur] + 1;deque.add(sub_p);}}}return dist;}

层级版:用于按层搜索

/** @description bfs按层搜索 * @param: p* @param: start* @returns void* @author yamu* @date 2025/5/8 15:31*/public void bfs(List<Integer>[] p, int start) {int n = p.length;boolean[] vis = new boolean[n];//记录当前节点是否访问过Deque<Integer> deque = new ArrayDeque<>();deque.add(start);vis[start] = true;while (!deque.isEmpty()) {int size = deque.size();//本层的节点数for (int i = 0; i < size; i++) {int cur = deque.poll();//遍历当前节点下的节点for (int sub_p : p[cur]) {//访问过了if (vis[sub_p]) {continue;}deque.add(sub_p);vis[sub_p] = true;}}}}

三. 题单

转自灵神题单

  1. 3243. 新增道路查询后的最短距离 I - 力扣(LeetCode)
  2. 1311. 获取你好友已观看的视频 - 力扣(LeetCode)
  3. 1129. 颜色交替的最短路径 - 力扣(LeetCode)
  4. 1298. 你能从盒子里获得的最大糖果数 - 力扣(LeetCode)
  5. 2039. 网络空闲的时刻 - 力扣(LeetCode)
  6. 2608. 图中的最短环 - 力扣(LeetCode)
  7. 815. 公交路线 - 力扣(LeetCode)
3243 好题,bfs统计到达每个点的最短距离;由于单向道路[u -> v]都是满足 v > u,即结果具有递增性(无后效性),可以用dp只bfs
v及v相关的所有点
1311 指定层级level进行bfs
1129 好题,带状态的bfs,需要遍历相反状态的邻接表
1298 暴力 bfs + 判断一下是否访问过
2039 距离模板题
2608 距离模板题
815 好题,多起点多终点找最短路径
http://www.xdnf.cn/news/349561.html

相关文章:

  • 腾讯云:数字世界的“量子熔炉”与硅基文明引擎​
  • 数据结构-堆排序
  • Houdini 深圳实操交流会!即将开幕
  • 代码随想录第39天:单调栈
  • VBA经典应用69例应用8:利用VBA,完成自动运行任务的预设
  • xiaopiu原型设计工具笔记
  • Windows 环境变量完全指南:系统变量、用户变量与 PATH 详解
  • 在不同环境下部署和运行基于后量子密码的轻量级通信协议的详细指南
  • pm2如何执行脚本批量启动多个服务
  • 认识守卫-以及简单的示例和装饰器
  • Java网络编程:理解URI、URL和URN
  • python线上学习进度报告
  • Android13 权限管理机制整理
  • 308.旅行终点站
  • 正点原子IMX6U开发板移植Qt时出现乱码
  • 什么是死信队列?死信队列是如何导致的?
  • TLS 1.3:一把打不开旧锁的新钥匙,为何难成主流?
  • Blind SSRF with Shellshock exploitation过关
  • [人机交互]以用户为中心的交互设计
  • 基于译码器和锁存器的运行逻辑的简易算法
  • 算法解密:轮转数组问题全解析
  • 多源地震资料处理中的震源信号分离算法资料
  • Java内存分配
  • 【git】git fsmonitor
  • 第四章:基于langchain构造一个完整RAG系统
  • 移动端返回指定页面
  • 本地聊天机器人部署方案
  • 《运维那些事儿》专栏总目录(持续更新)
  • SQLite3介绍与常用语句汇总
  • 【日撸 Java 三百行】Day 5(Switch语句)