【剑斩OFFER】算法的暴力美学——LeetCode 733 题:图像渲染

一、题目描述

二、算法原理

思路:层序遍历(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;
    }
};
相关推荐
不穿格子的程序员2 小时前
从零开始写算法——回溯篇2:电话号码的字母组合 + 组合总和
算法·深度优先·回溯
持梦远方2 小时前
算法剖析1:摩尔投票算法 ——寻找出现次数超过一半的数
c++·算法·摩尔投票算法
程序员-King.2 小时前
链表——算法总结与新手教学指南
数据结构·算法·链表
Ulyanov3 小时前
战场地形生成与多源数据集成
开发语言·python·算法·tkinter·pyside·pyvista·gui开发
天真小巫3 小时前
2026.1.18总结
职场和发展
FMRbpm3 小时前
树的练习6--------938.二叉搜索树的范围和
数据结构·c++·算法·leetcode·职场和发展·新手入门
wubba lubba dub dub7503 小时前
第三十三周 学习周报
学习·算法·机器学习
C+-C资深大佬3 小时前
C++数据类型
开发语言·c++·算法
多米Domi0114 小时前
0x3f 第35天 电脑硬盘坏了 +二叉树直径,将有序数组转换为二叉搜索树
java·数据结构·python·算法·leetcode·链表