Dashboard Temp Share Shortlinks Frames API

HTMLify

day37.py
Views: 10 | Author: prakhardoneria
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
from collections import deque

class Solution:
    def orangesRot(self, mat):
        rows = len(mat)
        cols = len(mat[0])
        queue = deque()
        fresh_count = 0
        
        # Initialize queue with all rotten oranges and count fresh ones
        for r in range(rows):
            for c in range(cols):
                if mat[r][c] == 2:
                    queue.append((r, c))
                elif mat[r][c] == 1:
                    fresh_count += 1
        
        # If there are no fresh oranges, no time is needed
        if fresh_count == 0:
            return 0
            
        time = 0
        directions = [(0, 1), (0, -1), (1, 0), (-1, 0)]
        
        # Start Multi-Source BFS
        while queue and fresh_count > 0:
            time += 1
            # Process all oranges rotten at this specific time step
            for _ in range(len(queue)):
                r, c = queue.popleft()
                
                for dr, dc in directions:
                    nr, nc = r + dr, c + dc
                    
                    # If neighbor is within bounds and is fresh
                    if 0 <= nr < rows and 0 <= nc < cols and mat[nr][nc] == 1:
                        mat[nr][nc] = 2
                        fresh_count -= 1
                        queue.append((nr, nc))
        
        return time if fresh_count == 0 else -1