solveSurroundedRegions function

void solveSurroundedRegions(
  1. List<List<String>> board
)

🏝️ Surrounded Regions (DFS)

Captures all regions surrounded by 'X' in the board by flipping all 'O's that are not on the border or connected to the border to 'X'.

Implementation

void solveSurroundedRegions(List<List<String>> board) {
  final m = board.length, n = board.isNotEmpty ? board[0].length : 0;
  void dfs(int r, int c) {
    if (r < 0 || r >= m || c < 0 || c >= n || board[r][c] != 'O') return;
    board[r][c] = 'E';
    dfs(r + 1, c);
    dfs(r - 1, c);
    dfs(r, c + 1);
    dfs(r, c - 1);
  }

  for (int i = 0; i < m; i++) {
    if (board[i][0] == 'O') dfs(i, 0);
    if (board[i][n - 1] == 'O') dfs(i, n - 1);
  }
  for (int j = 0; j < n; j++) {
    if (board[0][j] == 'O') dfs(0, j);
    if (board[m - 1][j] == 'O') dfs(m - 1, j);
  }
  for (int i = 0; i < m; i++) {
    for (int j = 0; j < n; j++) {
      if (board[i][j] == 'O') board[i][j] = 'X';
      if (board[i][j] == 'E') board[i][j] = 'O';
    }
  }
}