leetcode733——Flood Fill

题目大意:给出一个图片中每块像素的颜色,从一个给出坐标的起始点开始,给它以及和他相邻且与它颜色相同的像素块染上新的指定颜色。

例子:原题中给出的111 110 101,就是三乘三的图片,从第一个像素块开始染2号色

分析:dfs遍历四个方向

代码:

class Solution {
public:
int dirx[4] = { -1,1,0,0 };
int diry[4] = { 0,0,-1,1 };
vector> floodFill(vector>& image, int sr, int sc, int newColor) {
vector> visit(image.size(), vector(image[0].size(), false));
dfs(image, sr, sc, image[sr][sc], newColor, visit);
return image;
}
void dfs(vector>& image, int sr, int sc, int oldColor, int newColor, vector>& visit) {
image[sr][sc] = newColor;
visit[sr][sc] = true;
for (int i = 0;i < 4;i++) {
int nx = sr + dirx[i];
int ny = sc + diry[i];
if (ok(nx, ny, image) && !visit[nx][ny] && image[nx][ny] == oldColor) {
dfs(image, nx, ny, oldColor, newColor, visit);
}
}
}
bool ok(int nx, int ny, vector>& image) {
if (nx < 0 || nx >= image.size() || ny < 0 || ny >= image[0].size())
return false;
return true;
}
};

你可能感兴趣的:(搜索)