【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.pswp.cn/diannao/40935.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40935.shtml
英文地址,請注明出處:http://en.pswp.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;最后在…