function shortestPathBinaryMaze(grid, source, destination) {
const [n, m] = [grid.length, grid[0].length];
const [srcX, srcY] = source;
const [destX, destY] = destination;
if (grid[srcX][srcY] === 0 || grid[destX][destY] === 0) return -1;
const directions = [[0,1],[1,0],[0,-1],[-1,0]];
const dist = Array.from({ length: n }, () => Array(m).fill(Infinity));
dist[srcX][srcY] = 0;
const queue = [[srcX, srcY, 0]];
while (queue.length > 0) {
const [x, y, d] = queue.shift();
for (const [dx, dy] of directions) {
const [nx, ny] = [x + dx, y + dy];
if (nx >= 0 && ny >= 0 && nx < n && ny < m && grid[nx][ny] === 1 && d + 1 < dist[nx][ny]) {
dist[nx][ny] = d + 1;
queue.push([nx, ny, d + 1]);
}
}
}
return dist[destX][destY] === Infinity ? -1 : dist[destX][destY];
}
const grid = [[1,1,1],[0,1,0],[1,1,1]];
console.log("Shortest Distance:", shortestPathBinaryMaze(grid, [0,0], [2,2])); // Output: 4