
一、题目描述

二、算法原理
思路:层序遍历(BFS)解决 FloodFill 题

假设从(2,2)开始,我们先把(2,2)入队列,在把 image【 2】【2】 = color ,然后遍历他的上下左右的值是否和他一样 = 1,所以我们把(2,2)入队列之前先保存他对应的值,如果上下左右有值和他一样,那么入队列,直到队列为空;
三、代码实现
cpp
class Solution {
typedef pair<int,int> PII;
//上下左右的移动值
int dy[4] = {0,0,-1,1};
int dx[4] = {-1,1,0,0};
public:
vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {
int target = image[sr][sc];//保持原始值
if(target == color) return image;
int wight = image[0].size();//宽
int high = image.size();//高
queue<PII> que;
que.push({sr,sc});//使用层序遍历
image[sr][sc] = color;
while(que.size())//队列不为空继续查找
{
auto [x,y] = que.front();
que.pop();
for(int i = 0; i < 4; i++)//上下左右查找符合题目要求的值
{
int a = x + dy[i];
int b = y + dx[i];
if(a >= 0 && a < high && b >= 0 && b < wight && image[a][b] == target)//符合题目要求
{
image[a][b] = color;
que.push({a,b});
}
}
}
return image;
}
};