package com.cool.hot100.graph; import java.util.ArrayDeque; import java.util.HashMap; import java.util.Map; import java.util.Queue; /** * Created with IntelliJ IDEA. * * @Author: Cool * @Date: 2024/09/03/14:25 * DayNumber 3 * Hard 2 * Level ? */ public class Num994 { int[] rowChange = new int[] { 0, 1, -1, 0 }; int[] columnChange = new int[] { 1, 0, 0, -1 }; public int orangesRotting(int[][] grid) { int rowLength = grid.length; int columnLength = grid[0].length; Queue<Integer> queue = new ArrayDeque<>(); Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < rowLength; i++) { for (int j = 0; j < columnLength; j++) { if (grid[i][j] == 2) { int code = i * columnLength + j; queue.add(code); map.put(code, 0); } } } int res = 0; while (!queue.isEmpty()) { Integer code = queue.poll(); int row = code / columnLength; int column = code % columnLength; for (int i = 0; i < 4; i++) { int cRow = row + rowChange[i]; int cColumn = column + columnChange[i]; if (cRow >= 0 && cRow < rowLength && cColumn >= 0 && cColumn < columnLength && grid[cRow][cColumn] == 1) { grid[cRow][cColumn] = 2; int cCode = cRow * columnLength + cColumn; queue.add(cCode); map.put(cCode, map.get(code) + 1); res = map.get(cCode); } } } for (int[] ints : grid) { for (int j = 0; j < columnLength; j++) { if (ints[j] == 1) { return -1; } } } return res; } }