{ grid: number[][] (0=empty, 1=wall), startRow, startCol }
1DFS(grid, start):2 stack = [start]3 while stack not empty:4 cell = stack.pop() ← take from top (last in, first out)5 if cell already visited: continue6 mark cell as visited7 for each neighbor (up/down/left/right):8 if neighbor empty: stack.push(neighbor)9 done
1// DFS on a grid (no tree). 0 = empty, 1 = wall.2const dirs = [[-1,0],[1,0],[0,-1],[0,1]];34function dfs(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 stack: [number, number][] = [[startRow, startCol]];89 while (stack.length > 0) {10 const [r, c] = stack.pop()!;11 if (visited[r][c]) continue;12 visited[r][c] = true;13 for (const [dr, dc] of dirs) {14 const nr = r + dr, nc = c + dc;15 if (nr >= 0 && nr < rows && nc >= 0 && nc < cols && grid[nr][nc] === 0) {16 stack.push([nr, nc]);17 }18 }19 }20 return visited;21}