-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path733.flood-fill.cpp
76 lines (76 loc) · 2.38 KB
/
733.flood-fill.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*
* @lc app=leetcode id=733 lang=cpp
*
* [733] Flood Fill
*
* https://leetcode.com/problems/flood-fill/description/
*
* algorithms
* Easy (48.74%)
* Total Accepted: 31.1K
* Total Submissions: 63.7K
* Testcase Example: '[[1,1,1],[1,1,0],[1,0,1]]\n1\n1\n2'
*
*
* An image is represented by a 2-D array of integers, each integer
* representing the pixel value of the image (from 0 to 65535).
*
* Given a coordinate (sr, sc) representing the starting pixel (row and column)
* of the flood fill, and a pixel value newColor, "flood fill" the image.
*
* To perform a "flood fill", consider the starting pixel, plus any pixels
* connected 4-directionally to the starting pixel of the same color as the
* starting pixel, plus any pixels connected 4-directionally to those pixels
* (also with the same color as the starting pixel), and so on. Replace the
* color of all of the aforementioned pixels with the newColor.
*
* At the end, return the modified image.
*
* Example 1:
*
* Input:
* image = [[1,1,1],[1,1,0],[1,0,1]]
* sr = 1, sc = 1, newColor = 2
* Output: [[2,2,2],[2,2,0],[2,0,1]]
* Explanation:
* From the center of the image (with position (sr, sc) = (1, 1)), all pixels
* connected
* by a path of the same color as the starting pixel are colored with the new
* color.
* Note the bottom corner is not colored 2, because it is not 4-directionally
* connected
* to the starting pixel.
*
*
*
* Note:
* The length of image and image[0] will be in the range [1, 50].
* The given starting pixel will satisfy 0 and 0 .
* The value of each color in image[i][j] and newColor will be an integer in
* [0, 65535].
*
*/
class Solution {
public:
int R,C, COLOR;
void floodme(vector<vector<int>>& image, int x, int y, int newColor){
if(x >= R || y >= C || x < 0 || y < 0)
return;
cout<<x<<" "<<y<<endl;
if(image[x][y] != COLOR)
return;
image[x][y] = newColor;
floodme(image, x+1, y, newColor);
floodme(image, x, y+1, newColor);
floodme(image, x-1, y, newColor);
floodme(image, x, y-1, newColor);
}
vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int newColor) {
R = image.size();
C = image[0].size();
COLOR = image[sr][sc];
if(COLOR != newColor)
floodme(image, sr, sc, newColor);
return image;
}
};