力扣-994-腐烂的橘子

力扣-994-腐烂的橘子

模拟过程,只是这个过程有点像广度优先搜索

  1. 不再发生腐烂,不是全部的退出条件,还有一半是新鲜橘子数为 0(0 返回 count,非 0 返回 -1)
  2. 被感染的橘子数字为源 + 1,避免重复无意义遍历
    public int orangesRotting(int[][] grid) {
        int rows = grid.length;
        int cols = grid[0].length;
        // 模拟
        int count = 0;
        int freshOrange = 0;

        // 当没有新的橘子被传染时,推出
        for (int[] ints : grid) {
            for (int j = 0; j < cols; j++) {
                if (ints[j] == 1) {
                    freshOrange++;
                }
            }
        }
        while (freshOrange != 0) {
            int original = freshOrange;
            for (int i = 0; i < rows; i++) {
                for (int j = 0; j < cols; j++) {
                    if (grid[i][j] == 2 + count) {
                        if (i - 1 >= 0 && grid[i - 1][j] == 1) {
                            grid[i - 1][j] = 2 + count + 1;
                            freshOrange--;
                        }
                        if (i + 1 <= rows - 1 && grid[i + 1][j] == 1) {
                            grid[i + 1][j] = 2 + count + 1;
                            freshOrange--;
                        }
                        if (j - 1 >= 0 && grid[i][j - 1] == 1) {
                            grid[i][j - 1] = 2 + count + 1;
                            freshOrange--;
                        }
                        if (j + 1 <= cols - 1 && grid[i][j + 1] == 1) {
                            grid[i][j + 1] = 2 + count + 1;
                            freshOrange--;
                        }
                    }
                }
            }
            if (original == freshOrange) {
                return -1;
            }
            count++;
        }
        return count;
    }
posted @ 2026-04-09 12:05  YaosGHC  阅读(3)  评论(0)    收藏  举报