leetcode994(c++):腐烂的橘子

第一次做这种题,看了题解之后知道原来是使用一种叫“BFS”的方法来解,即广度优先遍历。

个人理解:关于BFS,广度优先遍历,思想很简单,先定义一个队列,心中要有一个树的结构,每次只搜索树的一层,搜索到当前节点就把当前节点的母节点从队列中删除,同时将自己入队,当搜索到最后一层,队列中还有最后一层节点,再做一次循环,没有下一节点了,同时把上一轮(最后一层)的结点释放了,那么搜索就完成了,退出循环。

至于你想在每个节点做什么事情,那就在搜索到该结点的时候做了它,所有结点都做了事情,那么整个算法就结束了。
在这里插入图片描述

针对腐烂的橘子这道题,题目的意思:每分钟每个烂橘子可以把四方向相邻的好橘子变腐烂,多少分钟之后橘子全部腐烂?如果未腐烂,则返回-1。

对于每个单元格,可以有好橘子、烂橘子、空。

我们可以这样理解:

  1. 烂橘子要搞事情了,因为每一分钟烂橘子都要把旁边的橘子搞烂。
  2. 那么不妨把烂橘子当成是结点,刚开始的烂橘子就是首层结点,当在当前节点下面搞事情时,先把自己出队。
  3. 当遍历这一次烂橘子的过程中,有好橘子被搞烂,这些橘子就入队(因为下一分钟他们也要参搞烂别的好橘子)
  4. 遍历一次这些烂橘子,遍历完,分钟数+1,(因为是烂橘子是同时让相邻橘子变烂的)

举个例子:
在这里插入图片描述
c++代码:参考此处

 int orangesRotting(vector<vector<int>>& grid) {
   
 int min = 0, fresh = 0;
   //方向
   vector<pair<int,int>> direct = {
   {
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值