本文共 1382 字,大约阅读时间需要 4 分钟。
为了解决这个问题,我们需要找到所有被 'X' 围绕的区域,并将这些区域内的 'O' 填充为 'X'。边界上的 'O' 不会被填充,因为它们无法被 'X' 围绕。
我们可以使用广度优先搜索(BFS)来解决这个问题。具体步骤如下:
#include#include using namespace std;void solve(vector > &board) { int n = board.size(); if (n == 0) return; int m = board[0].size(); vector > visited(n, vector (m, false)); queue > q; // 初始化边界的'O' for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if (i == 0 || i == n-1 || j == 0 || j == m-1) { if (board[i][j] == 'O') { visited[i][j] = true; q.push({i, j}); } } } } // 四个方向:上下左右 int dirs[4][2] = {{-1,0}, {1,0}, {0,-1}, {0,1}}; while (!q.empty()) { auto current = q.front(); q.pop(); int x = current.first; int y = current.second; for (int d = 0; d < 4; ++d) { int nx = x + dirs[d][0]; int ny = y + dirs[d][1]; if (nx >= 0 && nx < n && ny >=0 && ny < m) { if (board[nx][ny] == 'O' && !visited[nx][ny]) { visited[nx][ny] = true; q.push({nx, ny}); } } } } // 填充内部未被访问的'O' for (int i=0; i
这种方法确保了所有无法逃脱到边界的 'O' 被正确填充为 'X',同时边界上的 'O' 保持不变。
转载地址:http://tnki.baihongyu.com/