LeetCode 1368. 使网格图至少有一条有效路径的最小代价(BFS最短路径,难)

1. 题目

给你一个 m x n 的网格图 grid 。 grid 中每个格子都有一个数字,对应着从该格子出发下一步走的方向。 grid[i][j] 中的数字可能为以下几种情况:

  • 1 ,下一步往右走,也就是你会从 grid[i][j] 走到 grid[i][j + 1]
  • 2 ,下一步往左走,也就是你会从 grid[i][j] 走到 grid[i][j - 1]
  • 3 ,下一步往下走,也就是你会从 grid[i][j] 走到 grid[i + 1][j]
  • 4 ,下一步往上走,也就是你会从 grid[i][j] 走到 grid[i - 1][j]
    注意网格图中可能会有 无效数字 ,因为它们可能指向 grid 以外的区域。

一开始,你会从最左上角的格子 (0,0) 出发。我们定义一条 有效路径 为从格子 (0,0) 出发,每一步都顺着数字对应方向走,最终在最右下角的格子 (m - 1, n - 1) 结束的路径。有效路径 不需要是最短路径

你可以花费 cost = 1 的代价修改一个格子中的数字,但每个格子中的数字 只能修改一次

请你返回让网格图至少有一条有效路径的最小代价

示例 1:
在这里插入图片描述

输入:grid = [[1,1,1,1],[2,2,2,2],[1,1,1,1],[2,2,2,2]]
输出:3
解释:你将从点 (0, 0) 出发。
到达 (3, 3) 的路径为: (0, 0) --> (0, 1) --> (0, 2) --> (0, 3) 
花费代价 cost = 1 使方向向下 --> (1, 3) --> (1, 2) --> (1, 1) --> (1, 0) 
花费代价 cost = 1 使方向向下 --> (2, 0) --> (2, 1) --> (2, 2) --> (2, 3) 
花费代价 cost = 1 使方向向下 --> (3, 3)
总花费为 cost = 3.

示例 2:
在这里插入图片描述

输入:grid = [[1,1,3],[3,2,2],[1,1,4]]
输出:0
解释:不修改任何数字你就可以从 (0, 0) 到达 (2, 2)

示例 3:
在这里插入图片描述

输入:grid = [[1,2],[4,3]]
输出:1示例 4:
输入:grid = [[2,2,2],[2,2,2]]
输出:3示例 5:
输入:grid = [[4]]
输出:0提示:
m == grid.length
n == grid[i].length
1 <= m, n <= 100

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-cost-to-make-at-least-one-valid-path-in-a-grid
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • BFS广度优先搜索,最短路径
  • 将箭头可以走到的地方全部加入队列,并标记访问过
  • 然后将队列里的取出,向4个方向反转路径,并一路添加新的没访问的可走点
class Solution {
public:int minCost(vector<vector<int>>& grid) {int m = grid.size(), n= grid[0].size();int i, j, x = 0, y = 0, a, b, k, flip = 0, size;vector<vector<int>> dir = {{0,0},{0,1},{0,-1},{1,0},{-1,0}};vector<vector<bool>> visited(m,vector<bool>(n,false));queue<pair<int,int>> q;while(x>=0 && x<m && y>=0 && y<n && !visited[x][y]){q.push({x,y});visited[x][y] = true;i = x + dir[grid[x][y]][0];j = y + dir[grid[x][y]][1];x = i, y = j;}if(visited[m-1][n-1])return 0;while(!q.empty()){size = q.size();flip++;while(size--){i = q.front().first;j = q.front().second;q.pop();for(k = 1; k <= 4; k++){x = i + dir[k][0];y = j + dir[k][1];while(x>=0 && x<m && y>=0 && y<n && !visited[x][y]){q.push({x,y});visited[x][y] = true;a = x + dir[grid[x][y]][0];b = y + dir[grid[x][y]][1];x = a, y = b;}}}if(visited[m-1][n-1])return flip;}return flip;}
};

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/477196.shtml

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

相关文章

Spring Boot工程结构推荐

今天看了一位简书上朋友发来的工程&#xff0c;于是想到应该要写这么一篇。前人总结的最佳实践案例可以帮助我们免去很多不必要的麻烦。花点时间来看一下本文&#xff0c;绝对物超所值。 工程结构&#xff08;最佳实践&#xff09; Spring Boot框架本身并没有对工程结构有特别…

GPT-3写了一篇论文

文 | Pine 发自 凹非寺源 | 量子位咦&#xff1f;这篇论文有点不对劲&#xff0c;第一作者看起来不像是人类的名字&#xff1a;一作的署名GPT-3&#xff0c;所属单位OpenAI。是的&#xff01;你没看错&#xff0c;GPT-3写了一篇关于自己的论文。此前&#xff0c;GPT-3已经撰写过…

程序员面试金典 - 面试题 02.03. 删除中间节点

1. 题目 实现一种算法&#xff0c;删除单向链表中间的某个节点&#xff08;除了第一个和最后一个节点&#xff0c;不一定是中间节点&#xff09;&#xff0c;假定你只能访问该节点。 示例&#xff1a; 输入&#xff1a;单向链表a->b->c->d->e->f中的节点c 结果…

Spring Boot开发Web应用

Spring Boot快速入门中我们完成了一个简单的RESTful Service&#xff0c;体验了快速开发的特性。在留言中也有朋友提到如何把处理结果渲染到页面上。那么本篇就在上篇基础上介绍一下如何进行Web应用的开发。 静态资源访问 在我们开发Web应用的时候&#xff0c;需要引用大量的j…

双塔模型的最强出装,谷歌又开始玩起“老古董”了?

文 | 兔子酱双塔模型已经证明在搜索和问答任务中是非常有效的建模方法&#xff0c;理论和业务落地已相当成熟。双塔根据参数共享程度不同&#xff0c;通常会归纳成两类&#xff1a;Simese dual encoder和Asymmetric dual encoder&#xff0c;前者参数结构完全对称&#xff0c;后…

LintCode解题目录

看见 LintCode 的代码能力测试CAT&#xff08;Coding Ability Test&#xff09;挺好&#xff0c;有倒计时&#xff0c;挺有面试紧迫感。做个记录。 另有本人 LeetCode解题目录、《程序员面试金典》解题目录、《剑指Offer》解题目录 我的 LintCode 主页 75 / 1505 算法问题 …

BERTopic:NLP主题模型的未来!

文| ZenMoore编| 小轶以前我一直以为&#xff0c;主题建模(提取文档的主题词)这种机器学习时代就开始研究的基础工具&#xff0c;现在肯定已经到头了&#xff0c;虽然...有时效果可能不是那么让人满意。但突然看到一则推文&#xff1a;“彻底疯了&#xff01;不需要预先清洗数据…

K 近邻法(K-Nearest Neighbor, K-NN)

文章目录1. k近邻算法2. k近邻模型2.1 模型2.2 距离度量2.2.1 距离计算代码 Python2.3 kkk 值的选择2.4 分类决策规则3. 实现方法, kd树3.1 构造 kdkdkd 树Python 代码3.2 搜索 kdkdkd 树Python 代码4. 鸢尾花KNN分类4.1 KNN实现4.2 sklearn KNN5. 文章完整代码k近邻法&#xf…

通用人工智能可行吗?组合泛化视角漫谈

"乌鸦为什么像写字台&#xff1f;"因为它们都能produce a few notes &#xff08;鸟叫/笔记&#xff09;&#xff0c;因为乌鸦和写字台都是思想与记忆的象征&#xff08;北欧神话&#xff09;&#xff0c;又或者因为&#xff0c;这本身就是一句没有道理的话&#xff…

Transformer 在美团搜索排序中的实践

引言 美团搜索是美团 App 连接用户与商家的一种重要方式&#xff0c;而排序策略则是搜索链路的关键环节&#xff0c;对搜索展示效果起着至关重要的效果。目前&#xff0c;美团的搜索排序流程为多层排序&#xff0c;分别是粗排、精排、异构排序等&#xff0c;多层排序的流程主要…

ACL‘22杰出论文:Prompt范式有bug!

‍文 | pythonGPT-3等超大模型的兴起&#xff0c;也带来了 in-context learning &#xff08;语境学习&#xff09;的新范式。在语境学习中&#xff0c;模型并不使用梯度下降&#xff0c;根据监督样本调整参数&#xff1b;而是将监督样本的输入输出接起来作为prompt&#xff08…

程序员面试金典 - 面试题 02.06. 回文链表(快慢指针+链表反转)

1. 题目 编写一个函数&#xff0c;检查输入的链表是否是回文的。 示例 1&#xff1a; 输入&#xff1a; 1->2 输出&#xff1a; false 示例 2&#xff1a; 输入&#xff1a; 1->2->2->1 输出&#xff1a; true 进阶&#xff1a; 你能否用 O(n) 时间复杂度和 O(1)…

美团外卖持续交付的前世今生

0. 前言 美团外卖自2013年创建以来&#xff0c;业务一直在高速发展&#xff0c;目前日订单量已突破3000万单&#xff0c;已成为美团点评最重要的业务之一。美团外卖所承载的业务&#xff0c;从早期单一的美食业务发展成为了外卖平台业务。目前除餐饮业务外&#xff0c;闪购、跑…

百万悬赏!寻找“模型越大,效果越差”的奇葩任务!

文 | 天于刀刀犹记 2018 年底谷歌开源 BERT 后&#xff0c;一大批基于 Attention 机制 Transformer 结构的大模型横空出世。XLNet、MPNet、ERNIE&#xff0c;NLP 任务彻底迈入大规模语料训练 fintune 的时代。之前一段时间爆火的 prompt 概念也离不开大模型中最基本的预训练 M…

程序员面试金典 - 面试题 02.08. 环路检测(快慢指针)

1. 题目 给定一个有环链表&#xff0c;实现一个算法返回环路的开头节点。 有环链表的定义&#xff1a;在链表中某个节点的next元素指向在它前面出现过的节点&#xff0c;则表明该链表存在环路。 示例 1&#xff1a; 输入&#xff1a;head [3,2,0,-4], pos 1 输出&#xff1…

Batch size 没必要设为2的次方!?

文 | 付瑶最近刷到一个话题很有趣,搬来和大家一起讨论下:“batch-size 一定要大小为2的幂吗&#xff1f;不这样设置会有啥差别吗&#xff1f;”发帖人认为大家都进入一个误区。坚持选择batch-size的大小为2的幂次数是因为曾经被告知从计算的角度是对训练效率有益的。但是这个“…

ICDAR 2019论文:自然场景文字定位技术详解

自然场景文字定位是文字识别中非常重要的一部分。与通用的物体检测相比&#xff0c;文字定位更具挑战性&#xff0c;文字在长宽比、尺度和方向上有更大范围的变化。针对这些问题&#xff0c;本文介绍一种融合文字片段及金字塔网络的场景文字定位方法。该方法将特征金字塔机制应…

程序员面试金典 - 面试题 10.01. 合并排序的数组

1. 题目 给定两个排序后的数组 A 和 B&#xff0c;其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法&#xff0c;将 B 合并入 A 并排序。 初始化 A 和 B 的元素数量分别为 m 和 n。 示例: 输入: A [1,2,3,0,0,0], m 3 B [2,5,6], n 3输出: [1,2,2,3,5,6]来源&…

LeCun论文被指「洗稿」? LSTM之父发文怒怼:抄我的还标原创

编 | 好困 Joey David源 | 新智元LSTM之父、暴脾气大爷Jrgen Schmidhuber又开炮了&#xff1f;这回怼的是LeCun&#xff0c;说最近的新论文是炒了自己20多年前的冷饭&#xff0c;只不过换了种说法而已。图灵奖得主Yann Lecun&#xff0c;作为AI界的三巨头之一&#xff0c;他发表…

ESLint 在中大型团队的应用实践

引言 代码规范是软件开发领域经久不衰的话题&#xff0c;几乎所有工程师在开发过程中都会遇到&#xff0c;并或多或少会思考过这一问题。随着前端应用的大型化和复杂化&#xff0c;越来越多的前端工程师和团队开始重视 JavaScript 代码规范。得益于前端开源社区的繁盛&#xff…