-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path733.flood-fill.cpp
90 lines (88 loc) · 2.54 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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
* @lc app=leetcode id=733 lang=cpp
*
* [733] Flood Fill
*
* https://leetcode.com/problems/flood-fill/description/
*
* algorithms
* Easy (49.80%)
* Total Accepted: 38K
* Total Submissions: 76.2K
* 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].
*
*/
#include <vector>
using namespace std;
class Solution
{
private:
int color;
int target;
int height;
int width;
vector<vector<int>> *img;
public:
vector<vector<int>> floodFill(vector<vector<int>> &image, int sr, int sc, int newColor)
{
color = newColor;
target = image[sr][sc];
if (color == target)
return image;
height = image.size();
width = image[0].size();
img = &(image);
f_fill(sr, sc);
return image;
}
void f_fill(int r, int c)
{
(*img)[r][c] = color;
if (r - 1 >= 0 && (*img)[r - 1][c] == target)
f_fill(r - 1, c);
if (r + 1 < height && (*img)[r + 1][c] == target)
f_fill(r + 1, c);
if (c - 1 >= 0 && (*img)[r][c - 1] == target)
f_fill(r, c - 1);
if (c + 1 < width && (*img)[r][c + 1] == target)
f_fill(r, c + 1);
}
};