每日一题

腐烂的苹果_牛客题霸_牛客网

思路分析:广度优先遍历,找到所有腐烂的苹果同时向四方扩散,就是第一轮把所有腐烂的苹果加入队列中,这就跟MQ的消息队列的原理差不多,第一次记录队列的长度,广度遍历一次,长度--并且四周为1的苹果变为腐烂状态(不是变成2 而是将状态数组变成true),直到所有腐烂的苹果全部扩散完毕, 如果还有苹果的状态为1 return - 1

package study2.day5;

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Queue;

//dfs 求 腐烂的苹果
public class Test5 {
    public int rotApple (ArrayList<ArrayList<Integer>> grid) {
        int m = grid.size();
        int n = grid.get(0).size();
        boolean[][] vis = new boolean[m][n];//记录当前位置是否正在使用
        int[] dx = {0, 0, 1, -1};
        int ret = 0;
        int[] dy = {1, -1, 0, 0};//dx 和 dy 拼接成上下左右的坐标
        Queue<int[]> queue = new ArrayDeque<>();
        for (int i = 0; i < grid.size(); i++) {
            for (int j = 0; j < grid.get(i).size(); j++) {
                if (grid.get(i).get(j) == 2){
                    queue.offer(new int[]{i, j});
                }
            }
        }
        while(!queue.isEmpty()){
            //队列不为空,就一次扩散,一次扩展全部腐烂的苹果
            int size = queue.size();
            while(size-- != 0){
                int[] t = queue.poll();
                int a = t[0], b = t[1];
                for (int i = 0; i < 4; i++) {
                    int x = a + dx[i],y = b + dy[i];
                    if (x >= 0 && y >= 0 && x < m && y < n && !vis[x][y] && grid.get(x).get(y) == 1){
                        vis[x][y] = true;//腐蚀掉
                        queue.offer(new int[]{x,y});//把被腐蚀掉的让他下一层再次扩展
                    }
                }
            }
            ret++;
        }
        //判断还有不能被腐蚀的苹果
        for (int i = 0; i < grid.size(); i++) {
            vis[i] = new boolean[grid.get(i).size()];
            for (int j = 0; j < grid.get(i).size(); j++) {
                if (grid.get(i).get(j) == 1 && !vis[i][j]){
                    return -1;
                }
            }
        }
        return ret - 1;
    }
}

 

相关推荐

  1. 每日】01

    2024-04-21 01:20:02       22 阅读
  2. 每日cf

    2024-04-21 01:20:02       26 阅读
  3. 每日——第二十

    2024-04-21 01:20:02       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-21 01:20:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-21 01:20:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-21 01:20:02       82 阅读
  4. Python语言-面向对象

    2024-04-21 01:20:02       91 阅读

热门阅读

  1. Intellij idea的快速配置详细使用

    2024-04-21 01:20:02       38 阅读
  2. 数据库1~4NF+ BCNF

    2024-04-21 01:20:02       36 阅读
  3. Hive中array,map,struct三种数据结构说明

    2024-04-21 01:20:02       33 阅读
  4. 第3章 数据

    2024-04-21 01:20:02       39 阅读
  5. PCL 基于马氏距离KMeans点云聚类

    2024-04-21 01:20:02       36 阅读
  6. MongoDB【四】查询与聚合框架

    2024-04-21 01:20:02       32 阅读
  7. vite与webpack有什么不同?为什么vite比webpack快?

    2024-04-21 01:20:02       39 阅读
  8. Webpack打包

    2024-04-21 01:20:02       34 阅读