Connected Cells in a Grid

  • + 0 comments
    from collections import deque
    
    def connectedCell(matrix):
        maxRegion = -1
        seen = set()
        start = findUnseen(matrix, seen)
        offset = [[-1, -1], [0, -1], [1, -1], [-1, 0], [1, 0], [-1, 1], [0, 1], [1, 1]]
        while start:
            # perfrom bfs from given starting point
            regionArea = 1
            frontier = deque()
            frontier.append(start)
            while frontier:
                curr = frontier.popleft()
                neighbors = []
                for of in offset:
                    i = curr[0] + of[0]
                    j = curr[1] + of[1]
                    if i >=0 and i < len(matrix) and j >= 0 and j < len(matrix[0]):
                        neighbors.append((i, j))
                if curr not in seen:
                    regionArea += 1
                    seen.add(curr)
                for neighbor in neighbors:
                    i = neighbor[0]
                    j = neighbor[1]
                    if matrix[i][j] == 1 and (i, j) not in seen:
                        frontier.append((i, j))
            maxRegion = max(regionArea, maxRegion)
            start = findUnseen(matrix, seen)
            
        return maxRegion
        
    def findUnseen(matrix, seen):
        for i in range(len(matrix)):
            for j in range(len(matrix[0])):
                if matrix[i][j] == 1 and (i, j) not in seen:
                    seen.add((i, j))
                    return (i, j)