classSolution{public:vector<vector<int>>colorBorder(vector<vector<int>>&grid,intr0,intc0,intcolor){dfs(grid,r0,c0,grid[r0][c0]);for(inti=0;i<grid.size();++i)for(intj=0;j<grid[0].size();++j)if(grid[i][j]<0)grid[i][j]=color;returngrid;}private:voiddfs(vector<vector<int>>&grid,inti,intj,intstartColor){if(i<0||i==grid.size()||j<0||j==grid[0].size())return;if(grid[i][j]!=startColor)return;grid[i][j]=-startColor;// Markdfs(grid,i+1,j,startColor);dfs(grid,i-1,j,startColor);dfs(grid,i,j+1,startColor);dfs(grid,i,j-1,startColor);// If this cell already on the boarder, it must be painted laterif(i==0||i==grid.size()-1||j==0||j==grid[0].size()-1)return;if(abs(grid[i+1][j])==startColor&&abs(grid[i-1][j])==startColor&&abs(grid[i][j+1])==startColor&&abs(grid[i][j-1])==startColor)grid[i][j]=startColor;}};
classSolution{publicint[][]colorBorder(int[][]grid,intr0,intc0,intcolor){dfs(grid,r0,c0,grid[r0][c0]);for(inti=0;i<grid.length;++i)for(intj=0;j<grid[0].length;++j)if(grid[i][j]<0)grid[i][j]=color;returngrid;}privatevoiddfs(int[][]grid,inti,intj,intstartColor){if(i<0||i==grid.length||j<0||j==grid[0].length)return;if(grid[i][j]!=startColor)return;grid[i][j]=-startColor;// Markdfs(grid,i+1,j,startColor);dfs(grid,i-1,j,startColor);dfs(grid,i,j+1,startColor);dfs(grid,i,j-1,startColor);// If this cell already on the boarder, it must be painted laterif(i==0||i==grid.length-1||j==0||j==grid[0].length-1)return;if(Math.abs(grid[i+1][j])==startColor&&Math.abs(grid[i-1][j])==startColor&&Math.abs(grid[i][j+1])==startColor&&Math.abs(grid[i][j-1])==startColor)grid[i][j]=startColor;}}