class Solution {
public:
vector> floodFill(vector>& image, int sr, int sc, int color) {
vector> result = image;
int n = image.size();
int m = image[0].size();
vector> visited(n, vector(m, false));
queue q;
q.push(sr);
q.push(sc);
visited[sr][sc] = true;
int s_color = image[sr][sc];
result[sr][sc] = color;
while(!q.empty()) {
int ci = q.front();
q.pop();
int cj = q.front();
q.pop();
if(ci + 1 < n and !visited[ci + 1][cj] and image[ci + 1][cj] == s_color) {
q.push(ci + 1);
q.push(cj);
visited[ci + 1][cj] = true;
result[ci + 1][cj] = color;
}
if(ci - 1 >= 0 and !visited[ci - 1][cj] and image[ci - 1][cj] == s_color) {
q.push(ci - 1);
q.push(cj);
visited[ci - 1][cj] = true;
result[ci - 1][cj] = color;
}
if(cj + 1 < m and !visited[ci][cj + 1] and image[ci][cj + 1] == s_color) {
q.push(ci);
q.push(cj + 1);
visited[ci][cj + 1] = true;
result[ci][cj + 1] = color;
}
if(cj - 1 >= 0 and !visited[ci][cj - 1] and image[ci][cj - 1] == s_color) {
q.push(ci);
q.push(cj - 1);
visited[ci][cj - 1] = true;
result[ci][cj - 1] = color;
}
}
return result;
}
};