Approach 1: Breadth-First Search
Every turn, the rotting spreads from each rotting orange to other adjacent oranges. Initially, the rotten oranges have 'depth' 0 [as in the spanning tree of a graph], and every time they rot a neighbor, the neighbors have 1 more depth. We want to know the largest possible depth.
We can use a breadth-first search to model this process. Because we always explore nodes (oranges) with the smallest depth first, we're guaranteed that each orange that becomes rotten does so with the lowest possible depth number.
We should also check that at the end, there are no fresh oranges left.
Time Complexity: , where is the number of cells in the grid.
Space Complexity: .
Analysis written by: @awice.