【3维BFS】个人练习-Leetcode-LCP 79. 提取咒文

题目链接:https://leetcode.cn/problems/kjpLFZ/

题目大意:给一个矩阵matrix[][],元素为小写英文字母。给一个字符串mantra,求从矩阵的(0,0)位置开始,可以移动(上下左右)或者提取字母,求组成字符串的最小【移动+提取次数】

思路:显然是BFS,然而BFS无法保证结果“最小”。一个例子就是,如果要找speed这个词,然而矩阵第一行是speeabd,第一列是speedxxx,那么如果在BFS时先按行找,就会陷入陷阱,因为明显按列找才是最短的。

看了题解才知道有一种“3维BFS”的存在。类似于一个魔方,在每一层进行BFS,上面一层满足了条件(找到下一个字母)后才能往下一层转移。转移了并不会终止上一层的BFS,这样就避免了遗漏可能的最小的其他路径。

并且还学到了新的【上下左右偏移】的写法,只用到一个长为5的一维数组dir就行。

完整代码

class Solution {
public:int extractMantra(vector<string>& matrix, string mantra) {int n = matrix.size(), m = matrix[0].length(), k = mantra.length();bool known[101][101][101] = {};const int dir[] = {0, 1, 0, -1, 0};queue<tuple<char, char, char>> q;q.emplace(0, 0, 0);known[0][0][0] = true;int ans = 0;while (!q.empty()) {for (int i = q.size(); i > 0; i--) {auto x = get<0>(q.front());auto y = get<1>(q.front());auto z = get<2>(q.front());q.pop();if (z == k)return ans;if (mantra[z] == matrix[x][y] && !known[x][y][z+1]) {q.emplace(x, y, z+1);known[x][y][z+1] = true;continue;}for (int j = 0; j < 4; j++) {auto tx = x + dir[j];auto ty = y + dir[j+1];if (tx >= 0 && tx < n && ty >= 0 && ty < m && !known[tx][ty][z]) {q.emplace(tx, ty, z);known[tx][ty][z] = true;}}}ans++;}   return -1;}
};

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

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

相关文章

怎么搭建个人博客教程,附云主机选购指南

一、搭建个人博客教程 1. 规划博客内容与技术栈 确定博客主题&#xff1a;首先明确博客的定位和主题&#xff0c;这将影响后续的技术选择和内容规划。选择技术栈&#xff1a;根据个人偏好和技术背景&#xff0c;选择合适的建站技术。例如&#xff0c;可以使用WordPress&#…

adobe pdf设置默认打开是滚动而不是单页视图

上班公司用adobe pdf&#xff0c;自己还不能安装其它软件。 每次打开pdf&#xff0c;总是默认单页视图&#xff0c;修改滚动后&#xff0c;下次打开又 一样&#xff0c;有时候比较烦。 后面打开编辑->首选项&#xff0c; 如下修改&#xff0c;下次打开就是默认滚动了

Websocket通信实战项目(图片互传应用)+PyQt界面+python异步编程(async) (上)服务器端python实现

Rqtz : 个人主页 ​​ 共享IT之美&#xff0c;共创机器未来 ​ Sharing the Beauty of IT and Creating the Future of Machines Together 目录 项目背景 ​编辑​专有名词介绍 服务器GUI展示 功能(位置见上图序号) 客户端GUI展示&#xff08;h5cssjs&#xf…

flask的进阶使用方法

【 一 】一对多关系 # 1 一对一 [本质就是一对多--》多的那个唯一] # 2 一对多 # 3 多对多1.1 关系 #### 一对多关系 class Hobby(Base):__tablename__ hobbyid Column(Integer, primary_keyTrue)caption Column(String(50), default篮球)def __str__(self):return sel…

C++多态(虚函数,纯虚函数,抽象类)

一.多态 1.理解&#xff1a; 多种形态&#xff0c;多种形式 eg:多个派生类均把基类的方法run重新实现&#xff0c;但是实现的方式不同&#xff0c;体现了多种形式&#xff0c;即为多态 2.分类 &#xff08;1&#xff09;编译时的多态&#xff1a;在编译过程中确定了同名操…

Java中的代码优化与重构策略

Java中的代码优化与重构策略 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. 引言 代码优化与重构在软件开发中扮演着至关重要的角色。优秀的代码不仅令人…

将游戏降权运行 2024年,防止游戏检测,泄漏个人隐私

不得不说&#xff0c;现在的游戏&#xff0c;胆子是真的越来越大了。很多都带了个启动器&#xff0c;你开着游戏的时候他就给他开多了1个扫描器&#xff0c;看下你有没看一些小孩不宜的&#xff0c;玩游戏不宜打开的软件什么的&#xff0c;包括你的MAC地址啊&#xff0c;你当前…

pydub、ffmpeg 音频文件声道选择转换、采样率更改

快速查看音频通道数和每个通道能力判断具体哪个通道说话&#xff1b;一般能量大的那个算是说话 import wave from pydub import AudioSegment import numpy as npdef read_wav_file(file_path):with wave.open(file_path, rb) as wav_file:params wav_file.getparams()num_cha…

量化交易:金融投资的新篇章

在金融投资的世界里&#xff0c;量化交易正逐渐成为一股不可忽视的力量。它以数据驱动和算法决策为特点&#xff0c;为投资者提供了一种全新的交易方式。本文将深入探讨量化交易的基本概念、优势、挑战以及如何开始使用量化交易策略。 量化交易的定义与起源 量化交易&#xf…

Android10以上实现获取设备序列号功能

Android10以上实现获取设备唯一标识&#xff0c;目前只支持华为和荣耀设备。实现原理&#xff1a;通过无障碍服务读取序列号界面。 public class DeviceHelper implements Application.ActivityLifecycleCallbacks {static final String TAG "WADQ_DeviceHelper";s…

Zoom使用的基本步骤和注意事项

Zoom是一款功能强大的视频会议软件&#xff0c;广泛应用于远程办公、在线教育、团队协作等多个场景。以下是Zoom使用的基本步骤和注意事项&#xff1a; 一、注册与登录 注册Zoom账户&#xff1a; 访问Zoom官方网站&#xff08;如zoom.us&#xff09;&#xff0c;点击“注册”…

Android Enable 和clickable

setEnabled 使能控件 设置为false&#xff0c;该控件永远不会活动&#xff0c;不管设置为什么属性&#xff0c;都无效&#xff1b; 设置为true&#xff0c;表明激活该控件&#xff0c;控件处于活动状态&#xff0c;处于活动状态&#xff0c;就能响应事件了&#xff0c;比如触摸…

mybatis实现动态sql

第一章、动态SQL MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验&#xff0c;你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格&#xff0c;还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特…

2024北京大健康展,北京健康生活产品展览会十月举办

2024北京健博会&#xff0c;立足北京&#xff0c;效应辐射全国买方市场&#xff0c;助力健康中国事业建设&#xff1b; 2024第11届中国&#xff08;北京&#xff09;国际大健康产业博览会 The 2024 China (Beijing) International Health Service Expo 时间&#xff1a;2024年…

华为 RIP 协议中 RIP 兼容版本、RIPv1、RIPv2 在收发 RIP 报文时的区别

华为 RIP 协议中 RIP 兼容版本、RIPv1、RIPv2 的区别 为了更好地支持实际环境中路由器对 RIP 的支持&#xff0c;华为 VRP 平台具有一个兼容版本&#xff0c;默认情况下启动 RIP 进程后&#xff0c;如果没有配置 RIP 版本&#xff0c;该版本就为兼容版本&#xff0c;对 versio…

[ C++ ] 深入理解模板( 进 阶 )

目录 非类型模板参数 类模板没有实例化的情况 模板的特化 注意函数特化中遇到的问题 建议&#xff1a;&#xff08;直接使用函数重载&#xff09; 类模板特化 全特化 偏特化 偏特化有以下两种表现方式&#xff1a; 部分特化&#xff08;将模板参数类表中的一部分参数特化…

vue this.$refs加变量名

想动态获取$refs&#xff0c;我们可以用模板字符串来动态绑定ref的值。代码如下&#xff1a; this.$refs[${this.treeQueFlag}].setCheckedNodes([]); $refs后面拼变量&#xff0c;vue动态给$refs赋值_vue ref动态赋值-CSDN博客

旅游系统(附管理端+前台)PHP源码

一. 前言 今天小编给大家带来了一款可学习&#xff0c;可商用的&#xff0c;旅游系统 源码&#xff0c;支持二开&#xff0c;无加密。支持景点管理&#xff0c;登录&#xff0c;景点预定&#xff0c;意见反馈&#xff0c;统计等功能。详细界面和功能见下面视频演示。 二. 视频…

【flutter问题记录】 无效的源发行版:17

问题描述 在看开源项目的时候&#xff0c;clone下来后一直编译失败&#xff0c;提示&#xff1a;无效的源发行版:17&#xff0c;看描述大概是jdk的版本问题&#xff0c;但是在Android studio各种指定都无用&#xff0c;网上资料也没有flutter项目的解决方案&#xff0c;最后在…