【C++算法】85.BFS解決最短路徑問題_最小基因變化

文章目錄

    • 題目鏈接:
    • 題目描述:
    • 解法
    • C++ 算法代碼:


題目鏈接:

433. 最小基因變化


題目描述:

3747d255974002d4d0636187de81c82a


解法

先看懂題目

db37338fbc13d126d70655f4a8566929

先把這個問題轉化:圖論問題

邊權為1的最短路問題。

為什么可以這么想?!

因為每次一步,最終目標也有。

6b5d5e068595e00207431c52fcad0b54


C++ 算法代碼:

class Solution {
public:int minMutation(string startGene, string endGene, vector<string>& bank) {// 使用哈希集合存儲已訪問的基因序列unordered_set<string> vis; // 將基因庫轉換為哈希集合,方便快速查找unordered_set<string> hash(bank.begin(), bank.end()); // 可能的基因變化字符string change = "ACGT"; // 如果起始基因和目標基因相同,直接返回0if (startGene == endGene)return 0;// 如果目標基因不在基因庫中,直接返回-1if (!hash.count(endGene))return -1;// 使用BFS隊列queue<string> q;q.push(startGene);vis.insert(startGene);int ret = 0;  // 記錄突變次數while (q.size()) {ret++;  // 每處理完一層,突變次數加1int sz = q.size();  // 當前層的節點數// 處理當前層的所有節點while (sz--) {string t = q.front();q.pop();// 嘗試改變每個位置的字符for (int i = 0; i < 8; i++) {string tmp = t;  // 創建臨時副本,避免修改原字符串// 嘗試將當前位置的字符變為A/C/G/Tfor (int j = 0; j < 4; j++) {tmp[i] = change[j];// 如果變化后的序列在基因庫中且未被訪問過if (hash.count(tmp) && !vis.count(tmp)) {// 找到目標基因,返回當前突變次數if (tmp == endGene)return ret;// 將新序列加入隊列,并標記為已訪問q.push(tmp);vis.insert(tmp);}}}}}// 如果隊列為空仍未找到目標基因,返回-1return -1;}
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91632.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91632.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91632.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于單片機汽車少兒安全預警系統

文章目錄一、前言1.1 項目介紹【1】項目開發背景【2】設計實現的功能【3】項目硬件模塊組成【4】設計意義【5】市面上同類產品研究現狀【6】摘要1.2 設計思路1.3 系統功能總結1.4 開發工具的選擇【1】設備端開發【2】上位機開發1.5 模塊的技術詳情介紹1.6 框架圖框架圖說明&…

Mac 上配置jdk 環境變量

核心步驟是設置 JAVA_HOME 變量&#xff0c;并將其 bin 目錄添加到系統的 PATH 變量中。 macOS 從 Catalina (10.15) 版本開始&#xff0c;默認的終端 Shell 從 bash 切換到了 zsh。因此&#xff0c;你需要先確定你正在使用的 Shell&#xff0c;然后編輯對應的配置文件。步驟一…

硬件-音頻學習DAY1——音箱材料選擇:密度板為何完勝實木

每日更新教程&#xff0c;評論區答疑解惑&#xff0c;小白也能變大神&#xff01;" 目錄 一.音箱材料選擇的關鍵因素 二.密度板的聲學優勢 三.材料穩定性的對比 四.生產工藝的適應性 五.成本與環保的平衡 六.特殊場景的例外情況 七.消費者選購指南 八.行業發展趨勢…

微波(Microwave)與毫米波(Millimeter wave)簡介

一、電磁波頻段劃分&#xff0c;微波與毫米波所屬 二、微波 可以看出UHF及以上的頻段都可以統稱為微波。記得之前上微波技術實驗課的時候會接觸比巴掌還大的金屬波導&#xff0c;后來每次看到微波技術的時候都還是感到陌生。今天突然想到&#xff0c;不像在手機里就能完成的5G頻…

ObjectMapper教程

ObjectMapper 簡介ObjectMapper 是 Jackson 庫的核心類&#xff0c;用于 Java 對象與 JSON 數據之間的相互轉換。它支持序列化&#xff08;對象轉 JSON&#xff09;和反序列化&#xff08;JSON 轉對象&#xff09;&#xff0c;廣泛應用于 REST API、數據存儲和配置處理等場景。…

【Node.js安裝注意事項】-安裝路徑不能有空格

問題描述&#xff1a;在項目中使用 nodemon時&#xff0c;出現了nodemon 啟動問題&#xff1a;nodemon : 無法將“nodemon”項識別為 cmdlet、函數、腳本文件或可運行程序的名稱。解決辦法&#xff1a;在網上找了很多教程&#xff0c;試了很多辦法&#xff0c;什么重新配置環境…

Shader開發(六)什么是著色器

在前面的章節中&#xff0c;我們簡要提到了著色器的概念&#xff0c;現在有了渲染管線的基礎知識&#xff0c;我們可以更深入地理解著色器的真正含義。著色器&#xff08;Shader&#xff09;是運行在圖形處理單元&#xff08;GPU&#xff09;上的專用程序&#xff0c;這與我們日…

操作系統-lecture4(進程的調度)

進程的切換 接下來需要了解兩個問題 誰觸發了進程切換進程切換的動作 中斷技術 中斷源 中斷處理過程&#xff08;陷阱機制&#xff09; 特權指令和非特權指令 Privileged Instructions&#xff1a;特權指令 ?The Instructions that can run only in Kernel Mode are called…

機器人程序優化

機器人程序優化核心摘要 本視頻詳細講解了機器人程序優化的方法與實踐&#xff0c;旨在提高程序的可讀性和復用性。通過學習文件夾、子程序調用以及路點優化等核心概念&#xff0c;觀眾將掌握如何將復雜的機器人搬運程序進行結構化整理&#xff0c;使其更易于理解、調試和在不…

一套視頻快速入門并精通PostgreSQL

PostgreSQL從入門到精通系列PostgreSQL數據庫是一個對理論知識與操作能力并重的技術&#xff0c;想要快速入門PostgreSQL數據庫&#xff0c;這兩個方面都要重視。這里的PostgreSQL從入門到精通&#xff0c;是專門針對剛入門的新手小白而錄制的一套&#xff0c;有理論講解也有動…

供應商管理系統有哪些功能?

在企業供應鏈數字化體系中&#xff0c;供應商管理系統是連接企業與外部合作伙伴的核心樞紐。以鯨采云采購管理系統的供應商模塊為例&#xff0c;其功能設計圍繞 “全生命周期管理 風險防控 協同效率” 三大核心&#xff0c;通過技術手段解決傳統供應商管理中的信息碎片化、流…

新手向:國內外大模型體驗與評測

國內外大模型體驗與評測技術詳解 近年來,人工智能領域的大模型技術取得了突破性進展,以GPT-4、Claude、文心一言等為代表的大語言模型(LLM)已經成為行業熱點。國內外科技巨頭紛紛布局這一賽道:國外有OpenAI的GPT系列、Anthropic的Claude、Google的PaLM,國內則有百度的文…

深度解讀 CSGHub:開源協議、核心功能與產品定位

在大模型時代&#xff0c;“可用”不再足夠&#xff0c;企業更需要“可管”、“可控”、“可演進”的一體化解決方案。作為國產開源陣營的中堅力量&#xff0c;CSGHub 如何從“開源與協議”到“功能定位”層層打磨&#xff0c;滿足不同行業對合規、安全和靈活部署的訴求&#x…

本土化DevOps實踐新篇章:Gitee引領企業高效協作新時代

本土化DevOps實踐新篇章&#xff1a;Gitee引領企業高效協作新時代 在數字化轉型的浪潮席卷全球的當下&#xff0c;軟件開發與運維的協同效率已經成為決定企業競爭力的關鍵因素。隨著國內企業對于數據安全和合規性的要求日益嚴格&#xff0c;尋找一套既符合本土監管要求又能提升…

B樹、B+樹、紅黑樹區別

一、核心概念與性質對比1. B樹&#xff08;Balanced Tree&#xff09;定位&#xff1a;多路平衡搜索樹&#xff0c;專為磁盤存儲優化核心性質&#xff1a;每個節點存儲 k-1個鍵值和k個子節點指針&#xff08;m/2 ≤ k ≤ m&#xff0c;m為階數&#xff09;所有葉子節點位于同一…

Spring AI 使用阿里百煉平臺實現流式對話:基于 SSE 的實踐

Spring AI阿里百煉平臺實現流式對話&#xff1a;基于 SSE 的實踐指南 在大模型應用開發中&#xff0c;流式對話是提升用戶體驗的關鍵特性。本文將詳細介紹如何利用 Spring AI 結合 Spring Boot&#xff0c;基于 SSE&#xff08;Server-Sent Events&#xff09;協議實現高效的流…

Ubuntu lamp

Ubuntu lamp 前言 在Ubuntu安裝lamp架構 我們了解到 lamp是完整的架構 我們前面了解到了 集合了Linux系統 apache MySQL 和PHP語言的完整架構 我們前面說了Centos7中編譯安裝 lamp 那么 我們去說一下在Ubuntu中安裝 ? ? 安裝apache2 ? apt直接安裝apache2 apt -y install a…

開源向量LLM - Qwen3-Embedding

1 Qwen3-Embedding介紹 Qwen3-Embedding遵循 Apache 2.0 許可證&#xff0c;模型大小從0.6B到8B&#xff0c;支持32k長文本編碼。 Model TypeModelsSizeLayersSequence LengthEmbedding DimensionMRL SupportInstruction AwareText EmbeddingQwen3-Embedding-0.6B0.6B2832K10…

云計算服務模式全解析:IaaS、PaaS、SaaS與DaaS的區別與應用

一、云計算概述 云計算是一種通過互聯網提供計算服務的模式&#xff0c;其核心特點是輸入/輸出與計算不在同一主機上。一個完整的云計算環境由云端&#xff08;計算設備&#xff09;、計算機網絡和終端&#xff08;輸入/輸出設備&#xff09;三部分組成&#xff0c;即"云…

qwen 多模態 預訓練流程步驟詳細介紹

Qwen&#xff08;通義千問&#xff09;是阿里云推出的大語言模型&#xff0c;其多模態預訓練是一個復雜且專業的過程&#xff0c;雖然官方沒有完全公開全部細節&#xff0c; 但從多模態大模型通用的預訓練邏輯上&#xff0c;一般包含以下主要步驟&#xff1a; 數據準備 多模態數…