1.链接
2.描述
3.思路
这个题目作为dfs到FloodFill的过渡,FloodFill算法解决的问题就是在找相同的区域块,在本题中,题目给出了具体的位置,而且只有一片区域,那么只需要对这个区域做一个dfs即可,和之前的二维dfs思路和代码设计过程是一样的
4.参考代码
class Solution
{
int newcolor;
int oldcolor;
int m,n;
public:
vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color)
{
if(image[sr][sc] == color)
return image;
newcolor = color;
oldcolor = image[sr][sc];
m = image.size();
n = image[0].size();
dfs(image,sr,sc);
return image;
}
int dx[4] = {-1,1,0,0};
int dy[4] = {0,0,-1,1};
void dfs(vector<vector<int>>& image,int row,int col)
{
image[row][col] = newcolor;
for(int k = 0;k<4;k++)
{
int x = row + dx[k];
int y = col + dy[k];
if(x>=0 && x<m && y>=0 && y<n && image[x][y] == oldcolor)
{
dfs(image,x,y);
}
}
}
};
总结
简单总结一下,用C++写的,这题算是dfs过渡到 FloodFill算法的一题