【LeetCode:2304. 網格中的最小路徑代價 | dijkstra(迪杰斯特拉)】

在這里插入圖片描述

🚀 算法題 🚀

🌲 算法刷題專欄 | 面試必備算法 | 面試高頻算法 🍀
🌲 越難的東西,越要努力堅持,因為它具有很高的價值,算法就是這樣?
🌲 作者簡介:碩風和煒,CSDN-Java領域新星創作者🏆,保研|國家獎學金|高中學習JAVA|大學完善JAVA開發技術棧|面試刷題|面經八股文|經驗分享|好用的網站工具分享💎💎💎
🌲 恭喜你發現一枚寶藏博主,趕快收入囊中吧🌻
🌲 人生如棋,我愿為卒,行動雖慢,可誰曾見我后退一步?🎯🎯

🚀 算法題 🚀

在這里插入圖片描述

在這里插入圖片描述

🍔 目錄

    • 🚩 題目鏈接
    • ? 題目描述
    • 🌟 求解思路&實現代碼&運行結果
      • ? dijkstra(迪杰斯特拉)
        • 🥦 求解思路
        • 🥦 實現代碼
        • 🥦 運行結果
    • 💬 共勉

🚩 題目鏈接

  • 2304. 網格中的最小路徑代價

? 題目描述

給你一個下標從 0 開始的整數矩陣 grid ,矩陣大小為 m x n ,由從 0 到 m * n - 1 的不同整數組成。你可以在此矩陣中,從一個單元格移動到 下一行 的任何其他單元格。如果你位于單元格 (x, y) ,且滿足 x < m - 1 ,你可以移動到 (x + 1, 0), (x + 1, 1), …, (x + 1, n - 1) 中的任何一個單元格。注意: 在最后一行中的單元格不能觸發移動。

每次可能的移動都需要付出對應的代價,代價用一個下標從 0 開始的二維數組 moveCost 表示,該數組大小為 (m * n) x n ,其中 moveCost[i][j] 是從值為 i 的單元格移動到下一行第 j 列單元格的代價。從 grid 最后一行的單元格移動的代價可以忽略。

grid 一條路徑的代價是:所有路徑經過的單元格的 值之和 加上 所有移動的 代價之和 。從 第一行 任意單元格出發,返回到達 最后一行 任意單元格的最小路徑代價。

示例 1:

輸入:grid = [[5,3],[4,0],[2,1]], moveCost = [[9,8],[1,5],[10,12],[18,6],[2,4],[14,3]]
輸出:17
解釋:最小代價的路徑是 5 -> 0 -> 1 。

  • 路徑途經單元格值之和 5 + 0 + 1 = 6 。
  • 從 5 移動到 0 的代價為 3 。
  • 從 0 移動到 1 的代價為 8 。
    路徑總代價為 6 + 3 + 8 = 17 。
    示例 2:

輸入:grid = [[5,1,2],[4,0,3]], moveCost = [[12,10,15],[20,23,8],[21,7,1],[8,1,13],[9,10,25],[5,3,2]]
輸出:6
解釋:
最小代價的路徑是 2 -> 3 。

  • 路徑途經單元格值之和 2 + 3 = 5 。
  • 從 2 移動到 3 的代價為 1 。
    路徑總代價為 5 + 1 = 6 。

提示:

m == grid.length
n == grid[i].length
2 <= m, n <= 50
grid 由從 0 到 m * n - 1 的不同整數組成
moveCost.length == m * n
moveCost[i].length == n
1 <= moveCost[i][j] <= 100

🌟 求解思路&實現代碼&運行結果


? dijkstra(迪杰斯特拉)

🥦 求解思路
  1. 該題通過迪杰斯特拉算法求解即可,但是需要注意的是,我們需要找到一個開始的節點位置,以及結束的位置,因為題目中給定的是可以從第一行任意節點開始,到達最后一行任意節點,這個過程通過設置倆個虛擬的節點解決。
  2. 其它的過程就是dijkstra基本求解過程。
  3. 具體實現代碼如下:
  4. 需要注意的是,該題還可以通過dp來做,后續補充。敬請期待。
🥦 實現代碼
class Solution {public int minPathCost(int[][] grid, int[][] moveCost) {int m=grid.length,n=grid[0].length;int[][] map=new int[m*n+2][m*n+2];for(int i=0;i<map.length;i++) Arrays.fill(map[i],Integer.MAX_VALUE/2);int start=m*n;for(int j=0;j<n;j++){int to=grid[0][j];map[start][to]=0+to;}for(int i=0;i<m-1;i++){for(int j=0;j<n;j++){int from=grid[i][j];for(int k=0;k<n;k++){int to=grid[i+1][k];map[from][to]=moveCost[from][k]+to;}}}for(int j=0;j<n;j++){int from=grid[m-1][j];map[from][n*m+1]=0;}int[] ans=dijkstra(grid,map,moveCost,start);for(int v:ans){System.out.println(v);}return ans[n*m+1];}public int[] dijkstra(int[][] grid,int[][] map,int[][] moveCost,int start){int m=grid.length,n=grid[0].length;PriorityQueue<int[]> queue=new PriorityQueue<>((a,b)->a[1]-b[1]);queue.add(new int[]{start,0});boolean[] flag=new boolean[m*n+2];Arrays.fill(flag,false);int[] dist=new int[m*n+2];Arrays.fill(dist,Integer.MAX_VALUE/2);dist[m*n]=0;while(!queue.isEmpty()){int[] arr=queue.poll();int next=arr[0],cost=arr[1];if(flag[next]) continue;flag[next]=true;for(int ne=0;ne<=m*n+1;ne++){if(map[next][ne]+dist[next]<dist[ne]){dist[ne]=map[next][ne]+dist[next];queue.add(new int[]{ne,dist[ne]});}}}return dist;}
}
🥦 運行結果

在這里插入圖片描述


💬 共勉

最后,我想和大家分享一句一直激勵我的座右銘,希望可以與大家共勉!

在這里插入圖片描述

在這里插入圖片描述

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

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

相關文章

Vue中使用Echarts實現數據可視化

文章目錄 引言一、安裝Echarts二、引入Echarts三、創建圖表容器四、初始化Echarts實例五、配置圖表選項和數據六、實現圖表更新七、Vue實例代碼結語我是將軍&#xff0c;我一直都在&#xff0c;。&#xff01; 引言 接著上一篇內容&#xff0c;我將繼續分享有關數據可視化的相…

Bellman-Ford算法

初步了解 Bellman-Ford算法是一種用于尋找帶有負權邊的圖中的單源最短路徑的算法。它可以處理一般的圖&#xff0c;包括存在負權邊和負權環的情況。 以下是Bellman-Ford算法的基本思想和步驟&#xff1a; 初始化&#xff1a;將源節點的距離設置為0&#xff0c;將所有其他節點…

Hook+jsdom 解決cookie逆向

前言 記錄下如何破cookie逆向 目標 目標網址:https://q.10jqka.com.cn/ 目標接口:http://q.10jqka.com.cn/index/index/board/all/field/zdf/order/desc/page/2/ajax/1/ 對抗:cookie反爬蟲處理,關鍵字v,如圖 解決步驟 1、JS中關鍵字查找 如上,我們找到了關鍵字 v,…

為何設計師都在用這個原型樣機資源網站?

談論原型樣機素材模板&#xff0c;這個話題對設計師來說如同老朋友一般熟悉。設計師們在創作完畢后&#xff0c;為了更淋漓盡致地展示他們的設計成果&#xff0c;通常會將其放置在真實的樣機素材模板中。這種原型樣機素材可以讓設計作品迅速且清晰地呈現在真實環境中。找到一個…

(5秒解決)ImportError: attempted relative import with no known parent package

尋找了很多方法&#xff0c;發現大家把事情講的復雜了。我這里用最簡單的辦法來解決父包引用找不到的問題。 報錯提示&#xff1a;ImportError: attempted relative import with no known parent package 先給大家看看我的目錄結構&#xff0c;model.py和test目錄在同一級。tra…

前端數組方法匯總集錦

前言 數組主要使用場景有&#xff1a; 存儲和處理數據&#xff1a;數組是一種有序的數據結構&#xff0c;可以用來存儲和處理多個相關的數據。在前端開發中&#xff0c;我們經常使用數組來存儲和處理列表、表格、選項等數據。 循環和遍歷&#xff1a;數組提供了循環和遍歷的功能…

Android12:內置第三方應用,權限控制器已停止運行,應用app已停止運行

1.設備先安裝我提供的app【EasyControler】 2.設備--設置--關于手機--版本號(滑動到最下方)---連續點擊六下打開 開發者模式 3.設置--系統--開發者模式--開發者選項 --打開usb調試 4.設置--安全設備管理應用--easycontrol的開關打開 5.將設備連接電腦 打開cmd命令框 輸入指令…

smartsofthelp 7.0 最簡單的代碼生成器

這是一款值得開發人員認真研究的軟件 https://pan.baidu.com/s/1xjDL5QypcRJ5neulUPFmWQ?pwdgedx 1.查詢數據庫死鎖相關信息 2.查看數據庫的鏈接情況 3.當前實例上的所有用戶 4.創建數據庫獨立密碼 5.查看數據庫使用的端口號 6.當前數據庫設置的最大連接數 7.當前數據庫最大的…

C語言運算符優先級表

C語言運算符優先級表 運算符優先級與結合性 優先級運算符描述結合性1&#xff0c;--后綴自增&#xff0c;自減從左往右()函數調用[]數組下標.結構體與聯合體訪問成員->結構體與聯合體通過指針訪問成員(type){list}復合字面量(C99)2&#xff0c;--前綴自增&#xff0c;自減從…

淡入淡出transition: right 1s

transition: right 1s; //重點直接改變right值 操作過快 這里用該方法實現1s內淡入淡出 達到效果目標

JS PromiseLike 的判定與使用

目錄 一. $.ajax()返回值遇到的問題二. Promise A 規范三. 判斷是否為PromiseLike3.1 判斷ES6的new Promise()3.2 判斷包含then方法的對象3.3 判斷$.ajax()返回的對象 一. $.ajax()返回值遇到的問題 當我們執行如下js代碼時&#xff0c;可以看到$.ajax()執行后&#xff0c;得到…

Linux python安裝 虛擬環境 virtualenv

根目錄創建 venvs 文件夾 sudo mkdir /venvs 進入 /venvs 目錄 cd /venvsp 創建虛擬環境&#xff0c;前提要按照 python3 安裝 的 命令 sudo apt install python3 sudo python3 -m venv 虛擬環境名 激活虛擬環境 sourcepippip /venvs/zen-venv/bin/activatepinpi 安裝flask pip…

【C語言】深入解開指針(四)

&#x1f308;write in front :&#x1f50d;個人主頁 &#xff1a; 啊森要自信的主頁 ??真正相信奇跡的家伙&#xff0c;本身和奇跡一樣了不起啊&#xff01; 歡迎大家關注&#x1f50d;點贊&#x1f44d;收藏??留言&#x1f4dd;>希望看完我的文章對你有小小的幫助&am…

centos7上用docker部署mysql 5.7,并解決中文亂碼問題

1. 安裝docker 查看這篇文章的前半部分即可&#xff1a; 虛擬機上安裝docker&#xff0c;并安裝flink鏡像 2. 安裝mysql 5.7 2.1 下載mysql鏡像 可以使用docker search mysql命令查看遠程鏡像倉庫中的鏡像信息&#xff0c;或者訪問dockerhub去找需要的鏡像 這里直接拉取鏡像…

ubuntu借助overlay方案實現重啟自動還原

配置重啟還原OS 首先&#xff1a;sudo apt install overlayroot 安裝一下軟件 然后編輯配置文件&#xff1a;/etc/overlayroot.conf * overlayroottmpfs or overlayroottmpfs:PARAMETERS write all changes to a temporary (ram only) backing device A tmpfs mount will …

ubuntu22.04安裝wvp-gb28181-pro 2023-11-23最新版本(一鍵安裝)

下載程序 輸入下面命令&#xff0c;輸入普通用戶密碼&#xff0c;切換到 root用戶 sudo su git clone -b ubuntu_wvp_online_install_2023_0425 https://gitcode.net/zenglg/ubuntu_wvp_online_install.git 等待下載完成 安裝 進入到克隆下來的路徑中 cd /home/tuners/ub…

萬界星空科技低代碼云MES系統

所謂“云MES”&#xff0c;它是基于MES管理云平臺儲存大數據運算而來&#xff0c;區別于一般管理系統&#xff0c;云MES操作運行不需要獨立的服務器去儲存和運行&#xff0c;而是通過云端進行數據、儲存、運行&#xff0c;最后將計算完的數據在MES系統上呈現&#xff0c;呈現端…

讓國內AI模型解題:滑動窗口中找出最大值,文心一言,通義千問錯誤率100%,訊飛星火略勝一籌

最近&#xff0c;一些大廠陸續放出了自己的AI模型&#xff0c;處于日常的使用和準確度&#xff0c;我通過一道試題來看一下文心一言、訊飛星火和通義千萬的回答結果 本道題是一道很經典的算法題&#xff0c;請在滑動窗口中找出最大值 文心一言 第一次給出答案 package main…

vue中v-if與v-for的優先級?

?&#x1f308;個人主頁&#xff1a;前端青山 &#x1f525;系列專欄&#xff1a;Vue篇 &#x1f516;人終將被年少不可得之物困其一生 依舊青山,本期給大家帶來vue篇專欄內容:vue中v-if與v-for的優先級? 目錄 v-if和v-for的優先級是什么&#xff1f; 一、作用 二、優先級…

移動機器人,開啟智能柔性制造新篇章

智能制造是當今工業發展的必然趨勢&#xff0c;而柔性制造則是智能制造的重要組成部分。在這個快速變革的時代&#xff0c;如何提高生產效率、降低成本、增強靈活性成為了制造業的關鍵挑戰。富唯智能移動機器人應運而生&#xff0c;為柔性制造注入了新的活力。 基于富唯智能AI-…