forked from akshitagit/CPP
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathflood_fill.cpp
More file actions
62 lines (45 loc) · 1.95 KB
/
flood_fill.cpp
File metadata and controls
62 lines (45 loc) · 1.95 KB
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
//Problem statement
// 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.
#include<bits/stdc++.h>
using namespace std;
vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int newColor) {
if(image[sr][sc] == newColor)
return image;
queue<int> qx;
queue<int> qy;
int rw = image.size();
int clm = image[0].size();
qx.push(sr);
qy.push(sc);
int curr = image[sr][sc];
image[sr][sc] = newColor;
while( !qx.empty() ) {
int x = qx.front();
int y = qy.front();
qx.pop();
qy.pop();
int arrx[] = {-1, 0, 1, 0};
int arry[] = {0, 1, 0, -1};
for(int i=0; i<4; i++) {
int tempx = x + arrx[i];
int tempy = y + arry[i];
if(tempx <0 || tempy < 0) continue;
if(tempx >=rw || tempy >= clm) continue;
if(image[tempx][tempy] == curr){
qx.push(tempx);
qy.push(tempy);
image[tempx][tempy] = newColor;
}
}
}
return image;
}