{ grid: number[][] (0=empty, 1=wall), startRow, startCol }
1BFS(grid, start):2 mark start visited, queue = [start]3 while queue not empty:4 cell = queue.dequeue() ← take from front5 for each neighbor (up/down/left/right):6 if neighbor empty and not visited:7 mark visited, queue.enqueue(neighbor)8 done
1// BFS on a grid (no tree). 0 = empty, 1 = wall.2const dirs = [[-1,0],[1,0],[0,-1],[0,1]];34function bfs(grid: number[][], startRow: number, startCol: number) {5 const rows = grid.length, cols = grid[0].length;6 const visited = grid.map(r => r.map(() => false));7 const queue: [number, number][] = [[startRow, startCol]];8 visited[startRow][startCol] = true;910 while (queue.length > 0) {11 const [r, c] = queue.shift()!;12 for (const [dr, dc] of dirs) {13 const nr = r + dr, nc = c + dc;14 if (nr >= 0 && nr < rows && nc >= 0 && nc < cols &&15 grid[nr][nc] === 0 && !visited[nr][nc]) {16 visited[nr][nc] = true;17 queue.push([nr, nc]);18 }19 }20 }21 return visited;22}