算法-交替方向的最小路徑代價III-Dijkstra最短路徑算法
題目給你兩個整數m和n表示一個網格的行數和列數。你的目標是到達單元格(m - 1, n - 1)。同時給你一個二維整數數組penalty。進入單元格(i, j)的代價為(i 1) * (j 1)。你從單元格(0, 0)開始最初需要支付其入口代價。進入(0, 0)后執行的行動從 1 開始編號。在每次行動中你可以移動到一個相鄰的單元格或者在當前單元格等待。如果滿足以下條件則移動遵循奇偶性規則在奇數編號的行動中你向右或向下移動。在偶數編號的行動中你向左或向上移動。行動的代價由以下方式決定如果你遵循奇偶性規則移動只需支付目標單元格的入口代價。如果你在違反奇偶性規則的方向上移動支付目標單元格的入口代價加上penalty[i][j]其中(i, j)是你移動前所在的單元格。如果你在單元格(i, j)中等待支付penalty[i][j]。在每次移動或等待之后行動編號增加 1。因此無論是否支付了懲罰代價所需遵循的奇偶性規則在每次行動后都會交替改變。返回到達(m - 1, n - 1)所需的最小總代價。示例 1輸入m 2, n 2, penalty [[5,3],[1,4]]輸出8解釋最優路徑為從單元格(0, 0)開始入口代價為(0 1) * (0 1) 1。行動 1向下移動到單元格(1, 0)入口代價為(1 1) * (0 1) 2。行動 2向右移動到單元格(1, 1)入口代價為(1 1) * (1 1) 4因為違反了偶數奇偶性規則額外代價為penalty[1][0] 1。因此總代價為1 2 4 1 8。題解思路Dijkstra最短路徑算法模版題需要注意的是除了優先級隊列還需要一個最小值數組維護答案舉例比如從A出發到C有兩條路徑A-C是權值是5先A-B,全值是3然后B-C,權值是4按優先級隊列會先走A-B再走B-C權值和是7但實際上是從A-C權值是5權值最小這就需要一個最小值數組另外需要考慮的就是最小值數組維護的維度。class Solution { // 奇數下標 1,3 對應向右或向下 // 偶數下標 0,2 對應向左或向上 private static final int[][] DIRS {{0, -1}, {0, 1}, {-1, 0}, {1, 0}}; // 左右上下 private record Node(long d, int i, int j, int k) { } public long minCost(int m, int n, int[][] penalty) { long[][][] dis new long[m][n][2]; for (long[][] mat : dis) { for (long[] row : mat) { Arrays.fill(row, Long.MAX_VALUE); } } PriorityQueueNode pq new PriorityQueue((a, b) - Long.compare(a.d, b.d)); // 支付 1 的入口代價 dis[0][0][1] 1; pq.offer(new Node(1, 0, 0, 1)); while (true) { Node top pq.poll(); long d top.d; int i top.i; int j top.j; int k top.k; if (i m - 1 j n - 1) { return d; } if (d dis[i][j][k]) { continue; } int p penalty[i][j]; // 原地不動 long newDis d p; if (newDis dis[i][j][k ^ 1]) { dis[i][j][k ^ 1] newDis; pq.offer(new Node(newDis, i, j, k ^ 1)); // k^1 切換行動編號的奇偶性 } // 移動一步 for (int idx 0; idx 4; idx) { int x i DIRS[idx][0]; int y j DIRS[idx][1]; if (0 x x m 0 y y n) { // 如果 k 和 idx 的奇偶性不同那么違反了奇偶性規則需要額外支付 p 的代價 newDis d (x 1) * (y 1) (idx % 2 ^ k) * p; if (newDis dis[x][y][k ^ 1]) { dis[x][y][k ^ 1] newDis; pq.offer(new Node(newDis, x, y, k ^ 1)); // k^1 切換行動編號的奇偶性 } } } } } }

相關新聞

基于Cucumber的UI自動化測試框架:從BDD理念到工程實踐

基于Cucumber的UI自動化測試框架:從BDD理念到工程實踐

1. 項目概述:為什么選擇Cucumber來做UI自動化? 如果你和我一樣,在軟件測試這條路上摸爬滾打了幾年,肯定經歷過這樣的場景:辛辛苦苦寫了幾百行自動化腳本,三個月后需求一改,腳本維護起來比重新寫…

2026/8/1 10:18:51 閱讀更多
基于51單片機與Proteus的汽車燈光控制系統仿真實踐

基于51單片機與Proteus的汽車燈光控制系統仿真實踐

1. 項目概述:從仿真到實踐的汽車燈光控制最近在整理一些老項目的資料,翻到了當年用51單片機做的一個汽車轉向燈控制系統仿真。這玩意兒雖然現在看技術棧有點“復古”,但作為理解嵌入式系統開發、硬件仿真和汽車電子控制邏輯的入門項目&#x…

2026/8/1 12:59:48 閱讀更多
基于reComputer R1000的BACnet MS/TP邊緣智能網關實踐

基于reComputer R1000的BACnet MS/TP邊緣智能網關實踐

1. 項目概述:當工業邊緣計算遇上BACnet 最近在折騰一個樓宇自控系統的老舊設備改造項目,客戶現場有一堆使用BACnet MS/TP協議的溫控器、傳感器,但它們的控制器已經停產,數據上不了云,運維成了大問題。傳統的方案要么是…

2026/8/2 6:45:01 閱讀更多
UE5程序化生成技術

UE5程序化生成技術

PDF版本: 鏈接: https://pan.baidu.com/s/1TzppjPglntKHy3-K-w11qg 提取碼: 8qry 1. 如何使用噪聲函數創建自然地形 在程序化地形生成中,噪聲函數(Noise Functions)是構建自然隨機感的基石。我們通常不會使用純粹的白噪聲&#xf…

2026/8/2 6:45:01 閱讀更多
網頁文章想存成 Markdown?把 HTML 丟進去就行

網頁文章想存成 Markdown?把 HTML 丟進去就行

網頁文章想存成 Markdown?把 HTML 丟進去就行 工具地址:https://html2md.share888.top/ 你是不是也遇到過這些煩心事 寫博客、做筆記、整理資料時,最常見的場景是: 看到一篇不錯的文章,想保存成自己的 Markdown&…

2026/8/2 6:45:01 閱讀更多
Amphenol LTW RCP-5SAFFM-SLM7B01線束組件解析及國產替代應用探討

Amphenol LTW RCP-5SAFFM-SLM7B01線束組件解析及國產替代應用探討

在現代工業設備中,線束組件不僅承擔電源連接功能,同時還負責信號傳輸、模塊互聯以及設備內部系統通信。隨著自動化設備、智能制造、新能源裝備等領域快速發展,工業連接線束對于穩定性、防護能力以及長期使用壽命提出了更高要求。 相比普通電子…

2026/8/2 6:45:01 閱讀更多
【單片機畢業設計】基于嵌入式的井下氣體液位井蓋狀態監測平臺 基于單片機的市政窨井智能檢測報警設備設計(016201)

【單片機畢業設計】基于嵌入式的井下氣體液位井蓋狀態監測平臺 基于單片機的市政窨井智能檢測報警設備設計(016201)

博主介紹:??碼農一枚 ,專注于大學生項目實戰開發、講解和畢業🚢文撰寫修改等。全棧領域優質創作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于嵌入式單片機,Java、小程序技術領域和畢業項目實戰 ??…

2026/8/2 6:35:01 閱讀更多
3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南 【免費下載鏈接】GetQzonehistory 獲取QQ空間發布的歷史說說 項目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過,那些年發過的QQ空間說說,那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南 【免費下載鏈接】GetQzonehistory 獲取QQ空間發布的歷史說說 項目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過,那些年發過的QQ空間說說,那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應用材料(Applied Materials)公司生產的一款用于半導體設備的I/O信號分配電路板。該型號(0100-02186)的核心特點如下:專用于Endura等半導體工藝腔室。集成信號路由與分配功能。連接控制…

2026/8/2 2:51:21 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機是日本日清(Nissei)品牌的一款工業用三相異步電機,適用于自動化設備及通用機械驅動。該型號(FFMN-32L-10-T0 40AX)的核心特點如下:三相交流異步電動機。額定…

2026/8/2 2:52:49 閱讀更多