1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| class Solution { bool border(vector<vector<int>>& grid, int r, int c) { vector<int> di = {1, 0, -1, 0}; vector<int> dj = {0, 1, 0, -1}; for (int k = 0; k < 4; ++k) { int ni = r + di[k]; int nj = c + dj[k]; if (ni < 0 || ni >= grid.size() || nj < 0 || nj >= grid[0].size() || abs(grid[ni][nj]) != abs(grid[r][c])) return true; } return false; } void dfs(vector<vector<int>> &grid, int r, int c) { grid[r][c] = -grid[r][c]; vector<int> di = {1, 0, -1, 0}; vector<int> dj = {0, 1, 0, -1}; for (int k = 0; k < 4; ++k) { int ni = r + di[k]; int nj = c + dj[k]; if (ni >= 0 && ni < grid.size() && nj >= 0 && nj < grid[0].size() && grid[ni][nj] == abs(grid[r][c])) dfs(grid, ni, nj); } if (!border(grid, r, c)) grid[r][c] = -grid[r][c]; } public: vector<vector<int>> colorBorder(vector<vector<int>>& grid, int r0, int c0, int color) { if (grid[r0][c0] == color) return grid; int origin_color = grid[r0][c0]; dfs(grid, r0, c0); for (auto& r : grid) { for (auto & item : r) { if (item < 0) item = color; } } return grid; } };
|