BFS解决FloodFill算法:(Leetcode:733. 图像渲染)

题目链接:733. 图像渲染 - 力扣(LeetCode)

使用广度优先遍历算法解决该问题:

从初始位置开始搜索,初始位置符合条件就入栈,并修改初始位置值。初始位置出栈。

再从初始位置开始广度优先搜索(上下左右)其他符合条件的位置入栈,并修改它们的值(搜索到即修改,防止同一位置被多次入栈)。每次出栈一个位置,并再次从该位置广度优先搜索,循环直至栈空。

cpp 复制代码
typedef pair<int,int> PII;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
class Solution {
public:
    vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {
        //处理边界条件(初始位置即为color则不需要修改)
        if(image[sr][sc]==color)
            return image;
        
        //广度优先搜索
        int prev=image[sr][sc];//记录初始位置的值
        queue<PII> q;
        q.push({sr,sc});//将初始位置入栈
        image[sr][sc]=color;//修改值
        int m=image.size();//行数,纵坐标边界值
        int n=image[0].size();//列数,横坐标边界值
        while(q.size())
        {
            int a=q.front().first;
            int b=q.front().second;
            q.pop();//出栈
            //广度优先搜索
            for(int i=0;i<4;++i)
            {
                int x=a+dx[i];
                int y=b+dy[i];
                if(x>=0&&y>=0&&x<m&&y<n&&image[x][y]==prev)
                {
                    q.push({x,y});
                    image[x][y]=color;//修改值
                }
            }
        }
        return image;
    }
};
相关推荐
nlpming10 分钟前
OpenClaw 代码解析
算法
学习永无止境@14 分钟前
MATLAB中矩阵转置
算法·matlab·fpga开发·矩阵
七颗糖很甜14 分钟前
雨滴谱数据深度解析——从原始变量到科学产品的Python实现【下篇】
python·算法·pandas
nlpming14 分钟前
OpenClaw system prompt定义
算法
nlpming15 分钟前
OpenClaw安装配置及简介
算法
爱码小白15 分钟前
MySQL 常用数据类型的系统总结
数据库·python·算法
玛丽莲茼蒿22 分钟前
Leetcode hot100 【中等】括号生成
算法·leetcode·职场和发展
小欣加油25 分钟前
leetcode 128 最长连续序列
c++·算法·leetcode·职场和发展
汀、人工智能37 分钟前
[特殊字符] 第94课:删除无效的括号
数据结构·算法·数据库架构·图论·bfs·删除无效的括号
pwn蒸鱼44 分钟前
leetcode:92. 反转链表 II
算法·leetcode·链表