题意:
思路:
数据范围不大,可以直接d f s,对于每个点都遍历和他相邻的并且未被访问的点,看下一个点是否越界或颜色和该点相同。
具体的逻辑判断在代码里。
代码:
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] 的连接组件的边框着色。 返回最终网格。 */