力扣 OJ 130. 被围绕的区域

拟墨画扇 提交于 2020-02-21 17:33:48

题目:

给定一个二维的矩阵,包含 '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'。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。

 

代码:

class Solution {
public:
	void solve(vector<vector<char>>& board, vector<vector<char>>& ans, int r, int c)
	{
		if (r < 0 || r >= board.size())return;
		if (c < 0 || c >= board[0].size())return;
		if (board[r][c] == 'X')return;
		if (ans[r][c] == 'O')return;
		ans[r][c] = 'O';
		solve(board, ans, r, c + 1);
		solve(board, ans, r, c - 1);
		solve(board, ans, r + 1, c);
		solve(board, ans, r - 1, c);
	}
	void solve(vector<vector<char>>& board) {
		if (board.size() == 0)return;
		if (board[0].size() == 0)return;
		vector<vector<char>>ans = board;
		for (int i = 0; i < ans.size(); i++)
		{
			for (int j = 0; j < ans[0].size(); j++)
			{
				ans[i][j] = 'X';
			}
		}
		for (int j = 0; j < board[0].size(); j++)
		{
			solve(board, ans, 0, j);
			solve(board, ans, board.size() - 1, j);
		}
		for (int i = 0; i < board.size(); i++)
		{
			solve(board, ans, i, 0);
			solve(board, ans, i, board[0].size() - 1);
		}
		board = ans;
	}
};

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!