Connected Cells in a Grid

  • + 1 comment

    Here's a simple solution Go:

    func rSearch(matrix *[][]int32, r, c, rows, cols int32) int32 {
        sum := int32(1)
        (*matrix)[r][c] = int32(2) // mark cell as visited
        for i := int32(-1); i <= 1; i++ {
            for j := int32(-1); j <= 1; j++ {
                if (i == 0 && j == 0) ||
                r + i < 0 || r + i >= rows ||
                c + j < 0 || c + j >= cols {
                    continue
                }
                if (*matrix)[r+i][c+j] == 1 {
                    sum += rSearch(matrix, r + i, c + j, rows, cols)
                }
            }
        }
        return sum
    }
    
    func connectedCell(matrix [][]int32) int32 {
        // - iterate over matrix left to right top to bottom
        // - when finding a cell, recursively explore the unvisited neighbors
        rows := int32(len(matrix))
        cols := int32(len(matrix[0]))
        var mSize int32
        for r := int32(0); r < rows; r++ {
            for c := int32(0); c < cols; c++ {
                if matrix[r][c] == 1 {
                    size := rSearch(&matrix, r, c, rows, cols)
                    if size > mSize {
                        mSize = size
                    }
                }
            }
        }
        return mSize
    }