题意:
思路:
数据范围不大,可以直接
d
f
s
dfs
dfs,对于每个点都遍历和他相邻的并且未被访问的点,看下一个点是否越界或颜色和该点相同。
具体的逻辑判断在代码里。
代码:
class Solution {
public:
vector<vector<int>> ne = {{1,0},{0,1},{0,-1},{-1,0}};
int n,m,las,colo;
vector<vector<int>> colorBorder(vector<vector<int>>& grid, int row, int col, int color) {
n=grid.size();m=grid[0].size();
vector<vector<bool>> vis(n, vector<bool>(m, false));
vis[row][col]=true;
dfs(grid,row,col,color,grid[row][col],vis);
return grid;
}
void dfs(vector<vector<int>>& grid, int row, int col,int colo,int las,vector<vector<bool>>&vis){
for(int i=0;i<4;i++){
int x=row+ne[i][0],y=col+ne[i][1];
if(x>=0&&x<n&&y>=0&&y<m){//未越界
if(vis[x][y]) continue;
if(grid[x][y]!=las){//不同色 上一个点是边界
grid[row][col]=colo;
}
else{
vis[x][y]=true;//标记
dfs(grid,x,y,colo,las,vis);
}
}
else grid[row][col]=colo;//越界后的上一个点是边界
}
}
};
/*
给定一个 m x n 整数矩阵网格,以及三个整数 row、col 和 color。 网格中的每个值代表该位置的网格方块的颜色。
如果两个正方形具有相同的颜色并且在 4 个方向中的任何一个方向上彼此相邻,则它们属于同一个连通分量。
连通分量的边界是连通分量中与不在该分量中的正方形在 4 方向上相邻的所有正方形,或者在网格边界(第一行或最后一行或列)上的所有正方形。
您应该使用颜色为包含方形 grid[row][col] 的连接组件的边框着色。
返回最终网格。
*/