LeetCode 1730. 获取食物的最短路径(BFS)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

你现在很饿,想要尽快找东西吃。你需要找到最短的路径到达一个食物所在的格子。

给定一个 m x n 的字符矩阵 grid ,包含下列不同类型的格子:

'*' 是你的位置。矩阵中有且只有一个 '*' 格子。
'#' 是食物。矩阵中可能存在多个食物。
'O' 是空地,你可以穿过这些格子。
'X' 是障碍,你不可以穿过这些格子。

返回你到任意食物的最短路径的长度
如果不存在你到任意食物的路径,返回 -1。

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

输入: grid = [
["X","X","X","X","X","X"],
["X","*","O","O","O","X"],
["X","O","O","#","O","X"],
["X","X","X","X","X","X"]]
输出: 3
解释: 要拿到食物,你需要走 3 步。

Example 2:
在这里插入图片描述

输入: grid = [
["X","X","X","X","X"],
["X","*","X","O","X"],
["X","O","X","#","X"],
["X","X","X","X","X"]]
输出: -1
解释: 你不可能拿到食物。

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

输入: grid = [
["X","X","X","X","X","X","X","X"],
["X","*","O","X","O","#","O","X"],
["X","O","O","X","O","O","X","X"],
["X","O","O","O","O","#","O","X"],
["X","X","X","X","X","X","X","X"]]
输出: 6
解释: 这里有多个食物。拿到下边的食物仅需走 6 步。示例 4:
输入: grid = [["O","*"],["#","O"]]
输出: 2示例 5:
输入: grid = [["X","*"],["#","X"]]
输出: -1提示:
m == grid.length
n == grid[i].length
1 <= m, n <= 200
grid[row][col]'*''X''O''#' 。
grid 中有且只有一个 '*'

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shortest-path-to-get-food
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 广度优先搜索
class Solution {
public:int getFood(vector<vector<char>>& grid) {int m = grid.size(), n = grid[0].size();vector<vector<int>> dir = {{1,0},{0,1},{-1,0},{0,-1}};queue<int> q;bool found = false;for(int i = 0; i < m; ++i){for(int j = 0; j < n; ++j)if(grid[i][j] == '*'){q.push(i*256+j);grid[i][j] = 'X'; // 访问过了found = true;break;}if(found)break;}int step = 0;while(!q.empty()){int size = q.size();while(size--){int x = q.front()/256;int y = q.front()%256;if(grid[x][y]=='#') //食物return step;q.pop();for(int d = 0; d < 4; ++d){int nx = x + dir[d][0];int ny = y + dir[d][1];if(nx>=0 && nx<m && ny>=0 && ny<n && grid[nx][ny]!='X'){q.push(nx*256+ny);if(grid[nx][ny] != '#')grid[nx][ny] = 'X'; // 标记为访问过了}}}step++;}return -1;}
};

56 ms 16.8 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

LeetCode 1874. 两个数组的最小乘积和

文章目录1. 题目2. 解题1. 题目 给定两个长度相等的数组a和b&#xff0c;它们的乘积和为数组中所有的a[i] * b[i]之和&#xff0c;其中 0 < i < a.length。 比如a [1,2,3,4]&#xff0c;b [5,2,3,1]时&#xff0c;它们的乘积和为 1*5 2*2 3*3 4*1 22 现有两个长…

LeetCode 1940. 排序数组之间的最长公共子序列(二分查找)

文章目录1. 题目2. 解题1. 题目 给定一个由整数数组组成的数组arrays&#xff0c;其中arrays[i]是严格递增排序的&#xff0c;返回一个表示所有数组之间的最长公共子序列的整数数组。 子序列是从另一个序列派生出来的序列&#xff0c;删除一些元素或不删除任何元素&#xff0…

最小二乘估计_相关性及最小二乘估计【20201026】

考前高考要求1.知识要求对知识的要求依次是了解、理解、掌握三个层次.2.能力要求(1)空间想象能力(2)抽象概括能力(3)推理论证能力(4)运算求解能力(5)数据处理能力(6)应用意识(7)创新意识3.个性品质要求个性品质是指考生个体的情感、态度和价值观.要求考生具有一定的数学视野&am…

oracle 只对成绩前三名进行排序其余不变_2021年采用美术统考成绩的重点院校名单汇总...

点击蓝字关注我们吧&#xff01;2019年底&#xff0c;教育部发文&#xff0c;除独立设置的本科艺术院校和参照院校(共48所)外&#xff0c;其余高校的美术学类和设计学类专业不允许组织校考。不管是211工程大学还是985工程大学&#xff0c;均被严格进行组织美术类校考。但是&…

LeetCode 1564. 把箱子放进仓库里 I(排序)

文章目录1. 题目2. 解题1. 题目 给定两个正整数数组 boxes 和 warehouse &#xff0c;分别包含单位宽度的箱子的高度&#xff0c;以及仓库中 n 个房间各自的高度。 仓库的房间分别从 0 到 n - 1 自左向右编号&#xff0c; warehouse[i] &#xff08;索引从 0 开始&#xff09;…

LeetCode 1580. 把箱子放进仓库里 II(排序)

文章目录1. 题目2. 解题1. 题目 给定两个正整数数组 boxes 和 warehouse &#xff0c;分别包含单位宽度的箱子的高度&#xff0c;以及仓库中n个房间各自的高度。 仓库的房间分别从0 到 n - 1 自左向右编号&#xff0c;warehouse[i]&#xff08;索引从 0 开始&#xff09;是第 …

oracle如何检查是否rac,Oracle RAC 状态检查

(1)srvctl status database -d dbservernameOraclezjgldb2$srvctl status database -d kms实例 kms1 正在节点 zjgldb1 上运行实例 kms2 正在节点 zjgldb2 上运行(2)crs_stat -toraclezjgldb2$crs_stat -t名称 类型 目标 状态 主机-------------…

LeetCode 1602. 找到二叉树中最近的右侧节点(BFS)

文章目录1. 题目2. 解题1. 题目 给定一棵二叉树的根节点 root 和树中的一个节点 u &#xff0c;返回与 u 所在层中距离最近的右侧节点&#xff0c;当 u 是所在层中最右侧的节点&#xff0c;返回 null 。 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,null,4,5,6], u …

LeetCode meituan-001. 小美的用户名

文章目录1. 题目2. 解题1. 题目 小美是美团的前端工程师&#xff0c;为了防止系统被恶意攻击&#xff0c;小美必须要在用户输入用户名之前做一个合法性检查&#xff0c;一个合法的用户名必须满足以下几个要求&#xff1a; 用户名的首字符必须是大写或者小写字母。用户名只能包…

LeetCode 5832. 构造元素不等于两相邻元素平均值的数组

文章目录1. 题目2. 解题1. 题目 给你一个 下标从 0 开始 的数组 nums &#xff0c;数组由若干 互不相同的 整数组成。 你打算重新排列数组中的元素以满足&#xff1a;重排后&#xff0c;数组中的每个元素都 不等于 其两侧相邻元素的 平均值 。 更公式化的说法是&#xff0c;重…

【学习笔记】【C语言】类型说明符

1. short和long 1> short和long可以提供不同长度的整型数&#xff0c;也就是可以改变整型数的取值范围。在64bit编译器环境下&#xff0c;int占用4个字节&#xff08;32bit&#xff09;&#xff0c;取值范围是-231~231-1&#xff1b;short占用2个字节&#xff08;16bit&…

LeetCode 5843. 作为子字符串出现在单词中的字符串数目

文章目录1. 题目2. 解题1. 题目 给你一个字符串数组 patterns 和一个字符串 word &#xff0c;统计 patterns 中有多少个字符串是 word 的子字符串。 返回字符串数目。 子字符串 是字符串中的一个连续字符序列。 示例 1&#xff1a; 输入&#xff1a;patterns ["a&quo…

[Deep Learning]任意层cnn的matlab版本实现

之前实现了一层的卷积神经网络&#xff0c;又实现了两层的卷积神经网络&#xff0c;接下来把cnn扩展到任意层就不难了。 这难道就是传说中的“道生一&#xff0c;一生二&#xff0c;二生三&#xff0c;三生万物”么&#xff1f;&#xff1d;。&#xff1d; 代码还是在github上。…

python中倒着输出输入值_十五、深入Python输入和输出

「Author&#xff1a;By Runsen」在很多时候&#xff0c;你会想要让你的程序与用户(可能是你自己)交互。你会从用户那里得到输入&#xff0c;然后打印一些结果。我们可以使用input和print语句来完成这些功能。inputname input(your name:)gender input(you are a boy?(y/n))…

LeetCode meituan-003. 小美的跑腿代购(排序)

文章目录1. 题目2. 解题1. 题目 小美的一个兼职是美团的一名跑腿代购员&#xff0c;她有 n 个订单可以接&#xff0c;订单编号是 1~n &#xff0c; 但是因为订单的时效性&#xff0c;他只能选择其中 m 个订单接取&#xff0c;精明的小美当然希望自己总的获利是最大的&#xff…

win启动linux iso文件位置,安装Linux之后如何进入win系统?

可能你的安装过程有问题&#xff0c;我不知道你之前是如何安装的&#xff0c;我跟你简要的说一下&#xff0c;整个安装的过程吧。1.下载好Ubuntu后&#xff0c;将U盘制作成虚拟光驱。 推荐使用ultraiso软碟通&#xff0c;简单易使用&#xff0c;百度教程一大堆。2.使用分区助手…

LeetCode meituan-006. 小团的神秘暗号

文章目录1. 题目2. 解题1. 题目 小团深谙保密工作的重要性&#xff0c;因此在某些明文的传输中会使用一种加密策略&#xff0c;小团如果需要传输一个字符串 S &#xff0c;则他会为这个字符串添加一个头部字符串和一个尾部字符串。 头部字符串满足至少包含一个 “MT” 子序列…

数据结构_二叉树遍历

#include<stdlib.h> #include<stdio.h> #define MAX 50 #define MAS 20 #define CHAR 1typedef char elem; //定义二叉树的数据结构 typedef struct node{elem data;//二叉树的值struct node *lchild; //左孩子struct node *rchild;//右孩子struct node *pare…

linux 文件编辑器,用于Linux的文本编辑器(除了Vi)?

用于Linux的文本编辑器(除了Vi)&#xff1f;首先&#xff0c;我说我在Mac OSX上使用TextMate来满足我的文本需求&#xff0c;因此我对此表示喜欢。 在Linux平台上有什么可比的吗&#xff1f; 我将主要使用它来编码python / ruby。谷歌搜索产生过时的答案。编辑&#xff1a;由于…

python 接口 、继承、重载运算符

文章目录1. 序列__getitem__2. __setitem__3. 抽象基类4. 不要直接子类化内置类型5. 继承顺序6. 重载运算符learn from 《流畅的python》 1. 序列__getitem__ 如果没有 __iter__ 和 __contains__ 方法&#xff0c; Python 会调用 __getitem__ 方法&#xff0c; 设法让 迭代 和…