给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。
找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。
示例:
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’。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。
这个题类似于迷宫题,就是寻找连接到边缘上的O的所有元素,所以可以用DFS也可以用BFS,C++使用了DFS,python3使用了BFS。DFS就是找到边缘,然后如果是O的话就把它打标记"$",然后递归找它四周的元素即可,注意边界就行。BFS就是利用队列,然后把四周为O的位置逐个放入遍历,总之利用队列实现BFS还是很直观的。
C++源代码:
class Solution {
public:
void solve(vector<vector<char>>& board) {
for(int i=0;i<board.size();i++){
for(int j=0;j<board[i].size();j++){
if((i==0 || i==board.size()-1 || j==0 || j==board[i].size()-1))
DFS(board, i, j);
}
}
for(int i=0;i<board