双端队列广搜——AcWing 175. 电路维修

双端队列广搜

定义

双端队列广搜(Breadth-First Search with a Deque)是一种图或树的遍历算法变体,它利用了双端队列(Deque,全称Double Ended Queue,允许在其两端进行插入和删除操作)作为数据结构来存储待探索的节点。与传统使用队列的BFS相比,双端队列BFS能够在某些特定问题中更高效地找到最短路径,尤其是当存在多条路径长度相等且需要找到特定类型的目标节点时。

运用情况

  1. 特定目标查找:当目标具有某种特性,且希望在找到第一个满足条件的节点时立即停止搜索。
  2. 无权图的最短路径问题:当图中的边没有权重,或者所有边的权重都相同时,可以用来快速找到两个节点间的最短路径。
  3. 游戏中玩家的移动策略:例如在棋盘游戏中寻找最短的移动步数到达目标位置,尤其是在每次移动代价相同的情况下。

注意事项

  1. 初始化:确保从源节点开始,将其放入双端队列的前端。
  2. 层次遍历:为了保证层次遍历的特性,新扩展的节点应当被添加到双端队列的末端,而当前处理的节点通常从队列的前端取出。
  3. 标记已访问:避免重复访问同一个节点,对于每个访问过的节点都要做标记。
  4. 目标检测:在每次循环开始前检查双端队列前端的节点是否为目标节点,如果是,则可以提前结束搜索。
  5. 剪枝:根据具体问题,适时进行剪枝操作可以减少不必要的探索,提高效率。

解题思路

  1. 初始化:创建一个双端队列,并将起始节点入队。
  2. 循环遍历:当双端队列非空时,进行循环。
    • 出队:从队列前端取出一个节点。
    • 检查目标:如果取出的节点是目标节点,记录结果并结束循环。
    • 扩展节点:对取出节点的所有邻居进行操作,若邻居未被访问过,则标记为已访问,并根据需要将其加入队列的末端。
  3. 处理结果:如果找到了目标节点,根据题目需求输出路径或步数;如果没有找到,则输出相应的失败信息。

AcWing 175. 电路维修

题目描述

AcWing 175. 电路维修 - AcWing

运行代码

#include <cstring>
#include <iostream>
#include <algorithm>
#include <deque>
#define x first
#define y second
using namespace std;
typedef pair<int, int> PII;
const int N = 510, M = N * N;int n, m;
char g[N][N];
int dist[N][N];
bool st[N][N];int bfs()
{memset(dist, 0x3f, sizeof dist);memset(st, 0, sizeof st);dist[0][0] = 0;deque<PII> q;q.push_back({0, 0});char cs[] = "\\/\\/";int dx[4] = {-1, -1, 1, 1}, dy[4] = {-1, 1, 1, -1};int ix[4] = {-1, -1, 0, 0}, iy[4] = {-1, 0, 0, -1};while (q.size()){PII t = q.front();q.pop_front();if (st[t.x][t.y]) continue;st[t.x][t.y] = true;for (int i = 0; i < 4; i ++ ){int a = t.x + dx[i], b = t.y + dy[i];if (a < 0 || a > n || b < 0 || b > m) continue;int ca = t.x + ix[i], cb = t.y + iy[i];int d = dist[t.x][t.y] + (g[ca][cb] != cs[i]);if (d < dist[a][b]){dist[a][b] = d;if (g[ca][cb] != cs[i]) q.push_back({a, b});else q.push_front({a, b});}}}return dist[n][m];
}int main()
{int t;cin >> t;while(t -- ){cin >> n >> m;for(int i = 0; i < n; i ++ ) cin >> g[i];int t = bfs();if(t == 0x3f3f3f3f) puts("NO SOLUTION");else cout << t << endl;}return 0;
}

代码思路

  1. 定义变量与初始化:定义了二维数组g来存储电路板状态,dist来存储从起点到各点的最小旋转次数(初始化为一个极大值),布尔数组st用于标记是否访问过某点。cs数组用于匹配当前点的电缆方向与期望方向的差异,dxdyixiy数组用于计算邻居节点坐标。

  2. 双端队列BFS:使用双端队列来存储待访问的节点,其中队首优先处理沿当前电缆方向前进的情况(无需额外旋转),队尾处理需要额外旋转的情况。这样可以保证在可能的情况下优先找到更优路径。

  3. 状态更新与路径计算:在BFS过程中,计算到达每个新节点的最小旋转次数,并根据当前点与期望方向的匹配情况决定是将新节点加入队首还是队尾。

  4. 主循环与输出:循环读取测试用例,对于每个电路板执行BFS,最后输出最小旋转次数或“NO SOLUTION”。

改进思路

  1. 内存优化:虽然原始代码已经相对高效,但是可以考虑在bfs函数内部使用局部变量代替全局变量,以减少内存占用和潜在的变量污染。

  2. 输入验证:在读取nm之前,增加对t的范围验证,确保输入合法。

  3. 代码清晰性:通过增加注释和改善变量命名,提高代码的可读性。

  4. 错误处理:在读取电路板状态时,增加输入验证,确保数据有效。

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

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

相关文章

1996-2023年各省财政收支数据(无缺失)(地方财政一般预算收入、地方财政一般预算支出)

1996-2023年各省财政收支数据&#xff08;无缺失&#xff09;&#xff08;地方财政一般预算收入、地方财政一般预算支出&#xff09; 1、时间&#xff1a;1996-2023年 2、来源&#xff1a;国家统计局、统计年鉴、 3、指标&#xff1a;地方财政一般预算收入、地方财政一般预算…

跨境业务经验推荐:三大优秀的IP代理服务商

作为一名多年从事跨境业务的老手&#xff0c;今天我要给大家介绍几款绝对靠谱的IP代理服务商&#xff0c;保证让你的全球业务更加顺畅&#xff01; 1. 711Proxy 711Proxy以其优秀的性能和覆盖范围广而著称。对于跨境电商和国际业务来说&#xff0c;快速稳定的网络连接至关重要…

d3dx9_43.dll丢失怎么解决?d3dx9_43.dll怎么安装详细教程

在使用计算机中&#xff0c;如果遇到d3dx9_43.dll丢失或许找不到d3dx9_43.dll无法运行打开软件怎么办&#xff1f;这个是非常常见问题&#xff0c;下面我详细介绍一下d3dx9_43.dll是什么文件与d3dx9_43.dll的各种问题以及d3dx9_43.dll丢失的多个解决方法&#xff01; 一、d3dx9…

Zynq—按键控制LED灯闪烁

一、GPIO简介 ZYNQ 的 IO包括对外连接的 GPIO 和内部 PS 与 PL 通信的 AXIO。其中对外的 GPIO 又分为 两种&#xff1a; MIO 和 EMIO。 MIO 和 EMIO 只是 GPIO 信号的两种接口&#xff0c; MIO 直连到PS(数量有限)&#xff0c; EMIO 则是 PS 扩展到 PL&#xff0c;从 PL 接出的…

UTONMOS:探索未来区块链与元宇宙的游戏奇妙融合

在科技的飞速发展浪潮中&#xff0c;区块链技术正以前所未有的力量重塑着各个领域&#xff0c;而游戏行业也迎来了一场前所未有的变革——元宇宙游戏的崛起。 元宇宙&#xff0c;这个充满无限想象的虚拟世界&#xff0c;让玩家能够沉浸其中&#xff0c;体验超越现实的奇幻之旅。…

springboot评选投票系统-计算机毕业设计源码15837

摘 要 本文介绍的是基于Spring Boot开发的评选投票系统小程序。该系统旨在为用户提供一个便捷、高效的平台&#xff0c;以实现评选活动的投票功能。随着社交媒体和互联网的普及&#xff0c;评选活动已成为各行业中常见的形式&#xff0c;如最佳歌曲、最佳演员等。然而&#xf…

探索PcapPlusPlus开源库:网络数据包处理与性能优化

文章目录 0. 本文概要1. PcapPlusPlus介绍1.1 概述1.2主要特性和功能1.3 PcapPlusPlus 主要模块关系和依赖1.4 网络协议层处理过程 2. 实例2.1 基于 PcapPlusPlus 的应用程序设计和封装流程&#xff1a;2.2 多线程示例代码2.3 代码说明&#xff1a; 3. 程序性能进一步优化3.1 避…

指哪打哪,重绘神器!我已出手…

最近AI界又爆出了一个大新闻&#xff0c;阿里巴巴、香港大学和蚂蚁集团的研究人员联合推出了一款超厉害的AI工具——MimicBrush&#xff0c;它的问世&#xff0c;无疑给图像编辑领域带来了一场革命&#xff0c;它就像魔法师手中的魔杖&#xff0c;轻轻一挥&#xff0c;就能让图…

隐私计算实训营第二期第七课:XGB算法与SGB算法开发实践

隐私计算实训营第二期-第七课 第七课&#xff1a;XGB算法与SGB算法开发实践1 决策树模型1.1 决策树的训练和预测过程1.2 决策树的发展过程 2 GBDT模型2.1 Boosting核心思想2.2 GBDT原理 3 XGB模型3.1 XGB核心思想3.2 XGB优点 3 隐语纵向树模型3.1 数据纵向分割3.2 隐私保护的树…

和小红书一起参会! 了解大模型与大数据融合的技术趋势

在过去的两年中&#xff0c;“大模型”无疑成为互联网行业的焦点话题&#xff0c;曾经炙手可热的大数据架构似乎淡出公众视野。然而&#xff0c;大数据领域并未停滞不前&#xff0c;反而快速演进&#xff0c;传统依赖众多开源组件的大数据平台正逐步过渡到以融合与简化为核心特…

SQL语句的案例分析

根据提供的图片内容&#xff0c;这段文字看起来像是一个SQL查询的一部分&#xff0c;特别是一个用于删除数据的语句。以下是对这段SQL的核心内容整理&#xff1a; ### 核心内容整理&#xff1a; 1. **删除操作**&#xff1a; - 使用DELETE语句来删除数据。 2. **子查询**…

Java 并发集合:CopyOnWrite 写时复制集合介绍

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 016 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…

如何查看xpf文件

xpf文件是什么 XPF文件是“XML Paper Specification File”的缩写&#xff0c;它是一种文件保存格式&#xff0c;具有以下特点和相关信息&#xff1a; 一、定义与用途 定义&#xff1a;XPF文件用于保留文档的固定布局&#xff0c;包括文本、图片以及其他文档元素的确切位置。…

mysql-sql-第十三周

学习目标&#xff1a; sql 学习内容&#xff1a; 37.查询各科成绩最高分、最低分和平均分&#xff1a; 以如下形式显示&#xff1a;课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率 及格为>60,中等为&#xff1a;70-80,优良为&#xff1a;80-90,优秀…

Vue组件间通信方式超详细(父传子、父传后代、子传父、后代传父、兄弟组件传值、没有关系的组件传值)

Vue组件间通信方式超详细(父传子、父传后代、子传父、后代传父、兄弟组件传值)_vue 父传子-CSDN博客 vue 组件间传值&#xff1a;父传子 / 子传父 / 子传子 / 祖传孙 - 简书

刚入行的测试新人,应该如何规划自己的职业发展路径?

作为一个刚入行的测试新人&#xff0c;应该如何规划自己的职业发展路径&#xff1f;如何规划自己的技术路线&#xff1f;软件测试的段位都有哪些&#xff1f;他们之间的薪资差异如何&#xff1f; 听说这些问题&#xff0c;是目前想要入行软件测试的同学们最关心的。那么我们今天…

2024 年江西省研究生数学建模竞赛A题:交通信号灯管理问题分析、数学模型及VISSIM仿真实现

2024 年江西省研究生数学建模竞赛题目交通信号灯管理 1 题目 交通信号灯是指挥车辆通行的重要标志&#xff0c;由红灯、绿灯、 黄灯组成。红灯停、绿灯行&#xff0c;而黄灯则起到警示作用。交通 信号灯分为机动车信号灯、非机动车信号灯、人行横道信号 灯、方向指示灯等。 一…

第2章.现场设备的物联网模式--数字孪生

2.2 数字孪生 DT是部署在现场的物联网设备的虚拟复制品。这个概念与创建物理实体或过程的模型&#xff08;模拟&#xff09;以了解其表现行为的过程非常相似。本书中使用的DT符号如下图所示&#xff1a; 图2.3——DT模式的符号 DT是物联网背景下的一种重要模式&#xff0c;因为…

【计算机网络】计算题(作业)

【一】 1、如下图所示网络。A在t0时刻开始向C发送一个2Mbits的文件&#xff1b;B在t0.1e秒&#xff08;e为无限趋近于0的小正实数&#xff09;向D发送一个1Mbits的文件。忽略传播延迟和结点处理延迟。 请回答下列问题&#xff1a;‏ &#xff08;1&#xff09;如果图中网络采…

检索增强生成RAG系列5--RAG提升之路由(routing)

在系列3和系列4我讲了关于一个基本流程下&#xff0c;RAG的提高准确率的关键点&#xff0c;那么接下来&#xff0c;我们再次讲解2个方面&#xff0c;这2个方面可能与RAG的准确率有关系&#xff0c;但是更多的它们是有其它用途。本期先来讲解RAG路由。 目录 1 基本思想2 Logica…