算法-交替方向的最小路径代价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/7/31 3:44:44 阅读更多 →
基于51单片机与Proteus的汽车灯光控制系统仿真实践

基于51单片机与Proteus的汽车灯光控制系统仿真实践

1. 项目概述:从仿真到实践的汽车灯光控制最近在整理一些老项目的资料,翻到了当年用51单片机做的一个汽车转向灯控制系统仿真。这玩意儿虽然现在看技术栈有点“复古”,但作为理解嵌入式系统开发、硬件仿真和汽车电子控制逻辑的入门项目&#x…

2026/7/31 3:44:44 阅读更多 →
短视频、自媒体账号内容资产确权操作规范

短视频、自媒体账号内容资产确权操作规范

在当今数字化时代,短视频和自媒体蓬勃发展,账号内容资产的确权变得尤为重要。以下将从概念定义、技术架构组成、常规运营思路和模式特点解析四个方面进行探讨。一、概念定义短视频、自媒体账号内容资产确权,指的是对创作者在短视频平台和自媒…

2026/7/31 3:43:44 阅读更多 →

最新新闻

终极Flash浏览器:如何让经典Flash游戏和应用重获新生

终极Flash浏览器:如何让经典Flash游戏和应用重获新生

终极Flash浏览器:如何让经典Flash游戏和应用重获新生 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 还记得那些经典的Flash小游戏吗?《植物大战僵尸》、《黄金矿工…

2026/7/31 4:18:55 阅读更多 →
Gooey:三行代码为Python命令行脚本添加GUI界面

Gooey:三行代码为Python命令行脚本添加GUI界面

1. 项目概述:告别命令行恐惧,用Gooey为Python脚本“一键换装”如果你写过Python脚本,尤其是那些需要处理文件、转换格式或者跑批处理任务的工具,大概率经历过这样的场景:你花了几天时间精心打磨了一个功能强大的脚本&a…

2026/7/31 4:18:55 阅读更多 →
医学研究偏倚控制:从原理到实践,确保研究结论的可靠性

医学研究偏倚控制:从原理到实践,确保研究结论的可靠性

1. 项目概述:为什么偏倚是医学研究的“隐形杀手”?做医学研究,尤其是临床研究,最怕的是什么?不是数据量不够,也不是统计方法太复杂,而是你的研究从一开始就“歪”了。这个“歪”,在专…

2026/7/31 4:18:55 阅读更多 →
Spring Boot + Vue 前后端分离实战:从零构建用户管理系统

Spring Boot + Vue 前后端分离实战:从零构建用户管理系统

1. 项目缘起&#xff1a;为什么从单体走向前后端分离&#xff1f; 几年前我刚入行的时候&#xff0c;接手的第一个项目就是传统的JSPServlet。那时候&#xff0c;前端JSP页面里嵌满了Java代码片段&#xff08; <% ... %> &#xff09;&#xff0c;后端开发改个按钮颜色…

2026/7/31 4:18:55 阅读更多 →
华为入局墨水屏:技术融合如何重塑电子纸生态与用户体验

华为入局墨水屏:技术融合如何重塑电子纸生态与用户体验

1. 项目概述&#xff1a;当“搅局者”遇上“慢生活”“华为搅局墨水屏”这个标题&#xff0c;最近在科技圈和数码爱好者社区里激起了不小的水花。乍一看&#xff0c;这像是一场“快”与“慢”的碰撞——一边是以通信技术、高性能芯片和快节奏迭代著称的科技巨头&#xff0c;另一…

2026/7/31 4:18:55 阅读更多 →
Windows C++ FFmpeg H.264/H.265编码实战:从环境搭建到核心流程详解

Windows C++ FFmpeg H.264/H.265编码实战:从环境搭建到核心流程详解

1. 项目概述与核心价值在音视频开发领域&#xff0c;尤其是Windows平台下的C应用开发&#xff0c;直接调用FFmpeg库进行H.264或H.265&#xff08;HEVC&#xff09;编码是一个既基础又核心的技能点。很多开发者可能熟悉使用FFmpeg命令行工具进行转码&#xff0c;但一旦需要将编码…

2026/7/31 4:17:55 阅读更多 →

日新闻

物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制&#xff0c;分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件&#xff0c;物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB&#xff08;云原生数据库&#xff09;采用物理复制&#xff0c;在同步延迟、数据…

2026/7/31 0:00:34 阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown&#xff1a;3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:34 阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前&#xff0c;游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据&#xff0c;中国AI游戏云市场规模已达18.6亿元&#xff1b;同时&#xff0c;游戏研发环节AI渗透率高达86%&#xff0c;生成式AI内容普及率超过50%。面对庞大的市场&#xff0c;游戏…

2026/7/31 0:00:34 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档&#xff0c;可以直接使用&#xff01;系统支持图片、视频、摄像头等多种方式检测裂缝&#xff0c;功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像&#xff01; pubg绝地求生目标检测数据集 1分类&#xff1a;e_body&#xff0c;14905个标签&#xff0c;txt格式 共计14244张图&#xff0c;99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别&#xff1a; allies enemy tag图片总量&#xff1a;7247张训练集&#xff1a;5139张验证集&#xff1a;1425张测试集&#xff1a;683张标注状态&#xff1a;全部已标注&#xff0c;即拿即用数据格式&#xff1a;支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻