【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.hqwc.cn/news/206127.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

色彩(2)调试喜好——适用于camera tuning

#灵感# 色彩是一种易感知的图像属性。 目录 1、消费级的camera 产品&#xff0c;最关注的是“肤色”。 2、受欢迎的颜色风格&#xff1a; 3、颜色误差 4、颜色调整方法 5、影响颜色的模块 1、消费级的camera 产品&#xff0c;最关注的是“肤色”。 家用监控产品输出的图…

深度学习图像分类算法研究与实现 - 卷积神经网络图像分类 计算机竞赛

文章目录 0 前言1 常用的分类网络介绍1.1 CNN1.2 VGG1.3 GoogleNet 2 图像分类部分代码实现2.1 环境依赖2.2 需要导入的包2.3 参数设置(路径&#xff0c;图像尺寸&#xff0c;数据集分割比例)2.4 从preprocessedFolder读取图片并返回numpy格式(便于在神经网络中训练)2.5 数据预…

python中的exec()、eval()以及complie()

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 1.eval函数 函数的作用&#xff1a; 计算指定表达式的值。 也就是说它要执行的python代码只能是单个表达式&#xff08;注意eval不支持任何形式的赋值操作&…

2014年7月15日 Go生态洞察:Go将亮相OSCON 2014

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

好视通视频会议系统(fastmeeting) toDownload.do接口存在任意文件读取漏洞复现 [附POC]

文章目录 好视通视频会议系统(fastmeeting) toDownload.do接口存在任意文件读取漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 好视通视频会议系统(fastmeeting) toDownload.do接口存在任意文件…

浅谈低压绝缘监测及定位系统在海上石油平台的研究与应用

安科瑞 华楠 摘要&#xff1a;海上石油平台低压系统与陆地电力系统有很大区别&#xff0c;其属于中性点绝缘系统&#xff0c;在出现单相接地故障时&#xff0c;系统允许带故障正常运行2 h&#xff0c;保证海上重要电气设备不会立即关停。现以渤海某海上平台为例&#xff0c;其…

【23真题】劝退211!今年突变3门课!

今天分享的是23年云南大学847&#xff08;原827&#xff09;的考研试题及解析。同时考SSDSP的院校做一个少一个&#xff0c;珍惜&#xff01;同时考三门课的院校&#xff0c;复习压力极大&#xff0c;但是也会帮大家劝退很多人&#xff0c;有利有弊&#xff0c;请自行分析~ 本…

可上手 JVM 调优实战指南

文章目录 为什么要学 JVM一、JVM 整体布局二、Class 文件规范三、类加载模块四、执行引擎五、GC 垃圾回收1 、JVM内存布局2 、 JVM 有哪些主要的垃圾回收器&#xff1f;3 、分代垃圾回收工作机制 六、对 JVM 进行调优的基础思路七、 GC 情况分析实例八、最后总结 全程可上手JVM…

短时傅里叶变换函数编写

文章目录 傅里叶变换与短时傅里叶变换什么是窗&#xff1f;自己对手实现短时傅里叶变换 傅里叶变换与短时傅里叶变换 在了解短时傅里叶变换之前&#xff0c;首先要知道是什么是傅里叶变换&#xff08; fourier transformation&#xff0c;FT&#xff09;&#xff0c;傅里叶变换…

网上找客户有什么渠道?

在数字化时代&#xff0c;企业和个体创业者需要善于利用互联网来拓展业务和寻找潜在客户。网上找客户的渠道多种多样&#xff0c;合理运用这些渠道可以极大地提高曝光和业务机会。以下是一些成功寻找客户的网上渠道&#xff1a; 1. 社交媒体平台 社交媒体已成为建立专业形象和…

使用Microsoft Dynamics AX 2012 - 4. 销售和配送

销售和分销的主要职责是为客户提供您的商品和服务。为了完成这项任务&#xff0c;销售和分销需要通过分拣、运输和开具发票来处理销售订单&#xff0c;从而管理客户的材料需求。 销售和配送业务流程 在我们开始详细介绍之前&#xff0c;下面几行概述了销售和配送中的业务流程…

想打造私域流量帝国?先解决这4个难题!

一、谁是你的目标用户 1. 清晰界定目标用户&#xff1a;确定你的产品或服务主要面向的用户群体&#xff0c;如年龄段、性别、职业等特征。 2. 确定最有购买力的用户群体&#xff1a;分析哪个用户群体在购买你的产品或服务时更容易乐于支付&#xff0c;并将其作为重点关注对象。…