# 被围绕的区域 给你一个 m x n 的矩阵 board ,由若干字符 'X''O' ,找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O''X' 填充。

 

示例 1:

输入:board = [["X","X","X","X"],["X","O","O","X"],["X","X","O","X"],["X","O","X","X"]]
输出:[["X","X","X","X"],["X","X","X","X"],["X","X","X","X"],["X","O","X","X"]]
解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的 'O' 都不会被填充为 'X'。 任何不在边界上,或不与边界上的 'O' 相连的 'O' 最终都会被填充为 'X'。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。

示例 2:

输入:board = [["X"]]
输出:[["X"]]

 

提示:

## template ```java class Solution { int[] dx = { 1, -1, 0, 0 }; int[] dy = { 0, 0, 1, -1 }; public void solve(char[][] board) { int n = board.length; if (n == 0) { return; } int m = board[0].length; Queue queue = new LinkedList(); for (int i = 0; i < n; i++) { if (board[i][0] == 'O') { queue.offer(new int[] { i, 0 }); } if (board[i][m - 1] == 'O') { queue.offer(new int[] { i, m - 1 }); } } for (int i = 1; i < m - 1; i++) { if (board[0][i] == 'O') { queue.offer(new int[] { 0, i }); } if (board[n - 1][i] == 'O') { queue.offer(new int[] { n - 1, i }); } } while (!queue.isEmpty()) { int[] cell = queue.poll(); int x = cell[0], y = cell[1]; board[x][y] = 'A'; for (int i = 0; i < 4; i++) { int mx = x + dx[i], my = y + dy[i]; if (mx < 0 || my < 0 || mx >= n || my >= m || board[mx][my] != 'O') { continue; } queue.offer(new int[] { mx, my }); } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (board[i][j] == 'A') { board[i][j] = 'O'; } else if (board[i][j] == 'O') { board[i][j] = 'X'; } } } } } ``` ## 答案 ```java ``` ## 选项 ### A ```java ``` ### B ```java ``` ### C ```java ```