(搜索)
找到[row, col]对应的连通分量,搜索的时候判断该点是否属于边界点,是的话修改值
C++ 代码
class Solution {
public:
vector<vector<int>> colorBorder(vector<vector<int>>& grid, int row, int col, int color) {
int n = grid.size(), m = grid[0].size();
vector<vector<int>> g = grid;
int c = grid[row][col];
typedef pair<int, int> PII;
bool st[60][60];
PII q[60 * 60];
memset(st, 0, sizeof st);
int hh = 0, tt = 0;
q[0] = {row, col};
st[row][col] = true;
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
while(hh <= tt)
{
auto t = q[hh++];
for(int i = 0; i < 4; i++)
{
int x = t.first + dx[i], y = t.second + dy[i];
// 找到连通分量的边界点
if(!(x >= 0 && x < n && y >= 0 && y < m && grid[x][y] == c)) g[t.first][t.second] = color;
else if(!st[x][y])
{
st[x][y] = true;
q[++tt] = {x, y};
}
}
}
return g;
}
};