Given a binary matrix of size n * m, find out the maximum size of square sub-matrix with all 1s.
The algorithm examines each position (i, j) within the given matrix. Explores three possible paths:
If the value at the current position (i, j) is 0, it returns 0 (meaning it won't be part of result sub-matrix). Return take the minimum size of these three paths after add 1 to it. Compares this size to the max size found so far. After examining all positions in the matrix, returns the max size of the square sub-matrix with all 1s.
def search(m, i, j, mx): if i < 0 or i >= len(m) or j < 0 or j >= len(m[0]): return 0 right = search(m, i, j + 1, mx) down = search(m, i + 1, j, mx) diagonal = search(m, i + 1, j + 1, mx) if m[i][j] == 0: return 0 val = 1 + min(right, down, diagonal) mx[0] = max(mx[0], val) return val data = [ [0, 1, 1, 0, 1], [1, 1, 0, 1, 0], [0, 1, 1, 1, 0], [1, 1, 1, 1, 0], [1, 1, 1, 1, 1], [0, 0, 0, 0, 0] ] mx = [0] search(data, 0, 0, mx) print(mx[0])
function search(m, i, j, max) { if (i < 0 || i >= m.length || j < 0 || j >= m[0].length) { return 0; } let right = search(m, i, j + 1, max); let down = search(m, i + 1, j, max); let diagonal = search(m, i + 1, j + 1, max); if (m[i][j] === 0) return 0; let val = 1 + Math.min(right, down, diagonal); max[0] = Math.max(max[0], val); return val; } const data = [ [0, 1, 1, 0, 1], [1, 1, 0, 1, 0], [0, 1, 1, 1, 0], [1, 1, 1, 1, 0], [1, 1, 1, 1, 1], [0, 0, 0, 0, 0] ]; let max = [0]; search(data, 0, 0, max); console.log(max[0]);