public void wallsAndGates(int[][] rooms) {
        Deque<Cell> queue = new LinkedList<>();
        gates(rooms, queue);

        while (!queue.isEmpty()) {
            Cell cell = queue.pollLast();
            addNeighbors(rooms, cell.row, cell.col, queue);
        }

    }
You are given a m x n 2D grid initialized with these three possible values.
     -1 - A wall or an obstacle.
     0 - A gate.
     INF - Infinity means an empty room. We use the value 231 - 1 = 2147483647 to represent INF as
     you may assume that the distance to a gate is less than 2147483647.

Fill each empty room with the distance to its nearest gate. If it is impossible to reach a gate, it should be filled with INF

Time complexity O(n*m)
Space complexity O(n*m)

https://leetcode.com/problems/walls-and-gates/
src/com/interview/graph/WallsAndGates.java