优先算法专题十五——BFS_FloodFill

5个4000比特大状态置换算法的设计与分析 下面是 5 个概念性、实验性的 4000 位可逆置换设计。它们都保证是双射,但未经过密码分析,不可直接用于生产系统。风格分别覆盖:三维 SPN、Feistel、可逆元胞自动机、ARX、宽轨迹/Keccak 式结构。 这 5 个设计分别代表了 SPN、Feistel、元胞自动机、ARX、宽轨迹 Keccak 五种不同风格,覆盖了主流大状态置换的构造思路。再次强调:它们只是实验性概念,若要用于实际协议,必须经过严格安全性分析。 阅读详情

泛洪覆盖式地一层一层向外扩展

733. 图像渲染 - 力扣(LeetCode)

可将pair<int, int> 重命名为PII,方便代码编写

dx, dy加上当前坐标可计算当前位置的上下左右下标

提前记录image[sr][sc]的颜色,方便层次遍历时比较

class Solution {
public:
    typedef pair<int, int> PII;
    vector<int> dx = {0, 0, -1, 1};
    vector<int> dy = {-1, 1, 0, 0};
    vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {
        if(image[sr][sc] == color)
            return image;
        int l = image.size(), r = image[0].size();
        queue<PII> q;
        q.push({sr, sc});
        int basis_color = image[sr][sc];
        while(!q.empty())
        {
            PII p = q.front();
            q.pop();
            image[p.first][p.second] = color;
            for(int i = 0; i < 4; i++)
            {
                int x = p.first + dx[i], y = p.second + dy[i];
                if(x >=0 && x < l && y >= 0 && y < r && image[x][y] == basis_color)
                    q.push({x, y});
            }
        }
        return image;
    }
};

//思路:层次遍历,每次删除队列中元素之后进入这个元素周围上下左右和其值相同的元素,重复此操作

200. 岛屿数量 - 力扣(LeetCode)
 

两层for循环遍历数组grid,若是这个位置为1并且未被访问就让ans++,并且进入dfs函数使用层次遍历将这个位置以及相连陆地全部标记为访问过的;下一次两层for循环找到的1就一定是未发现的岛屿,ans++。

class Solution {
public:
    vector<int> dx = {0, 0, -1, 1};
    vector<int> dy = {-1, 1, 0, 0};
    int l, r;

    int numIslands(vector<vector<char>>& grid) {
        l = grid.size(), r = grid[0].size();
        //防止修改原数组,新建一个数组来表示这个位置是否被访问过
        vector<vector<bool>> vis(l, vector<bool>(r, false));
        int ans = 0;
        for(int i = 0; i < l; i++)
        {
            for(int j = 0; j < r; j++)
            {
                if(!vis[i][j] && grid[i][j] == '1')
                {
                    ans++;
                    dfs(vis, grid, i, j);//在这里面将这个(i, j)相连陆地全部标记成访问过的
                }
            }
        }
        return ans;
    }
    void dfs(vector<vector<bool>>& vis, vector<vector<char>>& grid, int i, int j)
    {
        queue<pair<int, int>> q;
        q.push({i, j});
        vis[i][j] = true;
        while(!q.empty())
        {
            auto [a, b] = q.front();
            q.pop();
            for(int k = 0; k < 4; k++)
            {
                int x = a + dx[k], y = b + dy[k];
                if(x >=0 && x < l && y >=0 && y < r && !vis[x][y] && grid[x][y] == '1')
                {
                    q.push({x, y});
                    vis[x][y] = true;
                }
            }
        }
    }
};

695. 岛屿的最大面积 - 力扣(LeetCode)

class Solution {
public:
    vector<int> dx = {0, 0, 1, -1};
    vector<int> dy = {1, -1, 0, 0};
    //bool vis[50][50] = {false};
    vector<vector<bool>> vis = {50, vector<bool>(50, false)};   

    int n = 0;
    int m = 0;

    int maxAreaOfIsland(vector<vector<int>>& grid) 
    {
        n = grid.size(); 
        m = grid[0].size();
        int ans = 0;

        for(int i = 0; i < n; i++)
            for(int j = 0; j < m; j++)
                if(vis[i][j] == false && grid[i][j] == 1)
                    ans = max(ans, bfs(i, j, grid));
        return ans;
    }
    int bfs(int i, int j, vector<vector<int>>& grid)
    {
        int count = 0;
        queue<pair<int, int>> myq;

        myq.push({i, j});
        ++count;
        vis[i][j] = true;

        while(!myq.empty())
        {
            auto [a, b] = myq.front();
            myq.pop();

            for(int k = 0; k < 4; k++)
            {
                int x = a + dx[k];
                int y = b + dy[k];
                if(x >= 0 && x < n && y >= 0 && y < m && vis[x][y] == false && grid[x][y] == 1)
                {
                    myq.push({x, y});
                    ++count;
                    vis[x][y] = true;
                }
            }
        }
        return count; 
    }
};

130. 被围绕的区域 - 力扣(LeetCode)


//正着来,直接做
// class Solution {
// public:
//     int n = 0, m = 0;
//     vector<int> dx = {0, 0, 1, -1};
//     vector<int> dy = {1, -1, 0, 0};
//     vector<vector<bool>> vis = {201, vector<bool>(201, false)};
//     void solve(vector<vector<char>>& board) 
//     {
//         n = board.size();
//         m = board[0].size();

//         for(int i = 0; i < n; i++)
//         {
//             for(int j = 0; j < m; j++)
//             {
//                 if(board[i][j] == 'O' && vis[i][j] == false)
//                 {
//                     bfs(board, i, j);
//                 }
//             }
//         }
//     }

//     //要判断这个区域是否和边界相连
//     void bfs(vector<vector<char>>& board, int i, int j)
//     {
//         //一个队列进行bfs遍历,另一个队列进行记录'O'下标
//         queue<pair<int, int>> q1, q2;
//         q1.push({i, j});
//         q2.push({i, j});
//         vis[i][j] = true;
//         while(q1.size())
//         {
//             auto [a, b] = q1.front();
//             q1.pop();
//             for(int k = 0; k < 4; k++)
//             {
//                 int x = a + dx[k];
//                 int y = b + dy[k];
//                 if(x >= 0 && x < n && y >= 0 && y < m && board[x][y] == 'O' && vis[x][y] == false)
//                 {
//                     q1.push({x, y});
//                     q2.push({x, y});
//                     vis[x][y] = true;
//                 }
//             }
//         }
//         //判断'O'区域有没有和边界相连,有则无法包围,返回即可;无则全部变为'X'
//         //由于vis的标记,下一次也不会再访问这个'O'区域的任何位置
//         queue<pair<int, int>> q3 = q2;
//         int flag = 1;
//         while(q2.size())
//         {
//             auto [a, b] = q2.front();
//             q2.pop();
//             if(a == 0 || a == n - 1 || b == 0 || b == m - 1)
//             {
//                 flag = 0;
//                 break;
//             }
//         }
//         if(flag)
//         {
//             while(q3.size())
//             {
//                 auto [a, b] = q3.front();
//                 board[a][b] = 'X';
//                 q3.pop();
//             }
//         }
//         else return;
//     }
// };


//反着来
//先遍历一遍矩形的边界,碰见'O',则对其进行bfs,做标记(改成'*'),表示和边界相连的'O'区域不用再管了
//层次遍历结束,遍历一遍矩阵,碰见'O'就换成'X'(此时绝对被包围);碰见'*'还原成'O'即可
class Solution {
public:
    int n = 0, m = 0;
    vector<int> dx = {0, 0, 1, -1};
    vector<int> dy = {1, -1, 0, 0};
    void solve(vector<vector<char>>& board) 
    {
        n = board.size();
        m = board[0].size();
        for(int i = 0, j = 0; j < m; j++)
        {
            if(board[i][j] == 'O')
                bfs(board, i, j);
        }
        for(int i = n - 1, j = 0; j < m; j++)
        {
            if(board[i][j] == 'O')
                bfs(board, i, j);
        }
        for(int i = 0, j = 0; i < n; i++)
        {
            if(board[i][j] == 'O')
                bfs(board, i, j);
        }
        for(int i = 0, j = m - 1; i < n; i++)
        {
            if(board[i][j] == 'O')
                bfs(board, i, j);
        }
        for(int i = 0; i < n; i++)
        {
            for(int j = 0; j < m; j++)
            {
                if(board[i][j] == 'O')
                    board[i][j] = 'X';
                else if(board[i][j] == '*')
                    board[i][j] = 'O';
            }
        }
    }
    void bfs(vector<vector<char>>& board, int i, int j)
    {
        queue<pair<int, int>> q1;
        q1.push({i, j});
        board[i][j] = '*';
        while(q1.size())
        {
            auto [a, b] = q1.front();
            q1.pop();
            for(int k = 0; k < 4; k++)
            {
                int x = a + dx[k];
                int y = b + dy[k];
                if(x >= 0 && x < n && y >= 0 && y < m && board[x][y] == 'O')
                {
                    q1.push({x, y});
                    board[x][y] = '*';
                }
            }
        }
    }
};

linux arm64 Debian12移植操作手册 2023年6月10号Debian官方出了debian12 arm64版本的。如果需要完全适配这个系统的话,需要linux6.10版本。应客户的需求,需要在Debian11升级为Debian12版本。 阅读详情

相关推荐

Ubuntu22.04 apt 安装 ROS1 ROS Noetic Ninjemys

ubuntu 22.04 apt-get 安装 ros1 ros Noetic 最新版

autolabor的博客 5万+

【优选算法】专题十五——BFS解决FloodFill算法

FloodFill(泛洪填充/漫水填充)算法,简单说就是从一个“种子点”出发,像洪水蔓延一样,查找到周围所有符合条件的位置,共同形成这样的一个区块。它最直观的应用就是画图软件里的“油漆桶”工具。核心原理:扩散与连通算法基于图遍历(DFS或BFS)实现,核心逻辑如下:起点:选择一个起始像素点(种子点)。扩散:检查该点的上下左右(四邻域)或有些时候也要求包括对角线(八邻域)的邻居。条件:如果邻居的颜色与起点颜色相同,且未被访问过,就将其“感染”成新颜色,并继续以该邻居为起点重复扩散。

2502_91380778的博客 518

Ubuntu登录界面黑屏?手把手教你排查和修复LightDM启动失败(附debug命令详解)

本文详细介绍了Ubuntu系统中LightDM(Light Display Manager)启动失败导致登录界面黑屏的排查与修复方法。通过系统状态检查、调试模式分析、常见故障解决方案及高级调试技巧,帮助用户快速定位并解决LightDM相关问题,恢复正常的图形登录环境。

weixin_34005090的博客 315

【专题十五】BFS 解决 FloodFill

【专题十五】BFS 解决 FloodFill:733. 图像渲染、200. 岛屿数量、695. 岛屿的最大面积、130. 被围绕的区域

tan_run的博客 803

MATLAB 论文复现——面向电量-调频-容量市场的数据中心园区算力及电力资源规划

如何在保证数据中心服务质量的前提下,考虑数据中心负荷转移特性,并对其进行合理规划,对降低数据中心规划总成本及提升新型电力系统灵活性均有显著意义。然后,根据不同电力市场的结算规则,研究了数据中心园区参与电量-调频-容量市场的方式和经济收益。在此基础上,以综合成本最小化为目标,优化数据中心园区发电机、储能的建设容量以及服务器的建设数量。最后,以阿里巴巴公开运行数据为例,证明考虑多元电力市场能够大大降低数据中心规划成本,激励数据中心园区投资建设更多灵活性资源,为电网提供有效的调频服务和容量支撑。

sjr1478的博客 666

Unity面试题总结

Unity面试题

sinat_34014668的博客 1万+

[优选算法专栏]专题十五:FloodFill算法(一)

[优选算法专栏]专题十五:FloodFill算法(一)

小小unicorn的博客 1258

Polyworks脚本开发学习笔记(一)-脚本开发环境

详细的总结和记录了利用Polyworks进行脚本开发的一些方法和心得

qq_43662503的博客 6800

[优选算法专栏]专题十五:FloodFill算法(二)

[优选算法专栏]专题十五:FloodFill算法(二)

小小unicorn的博客 874

SAP 与 Palantir 合作全景解析:这不是普通集成,而是把 ERP、数据语义层、云迁移与企业级 AI 串成一条价值链

SAP与Palantir的战略合作聚焦企业数字化转型核心痛点,通过深度技术整合构建"数据-决策-执行"闭环。合作包含四大主线:云迁移连续性保障、SAP业务数据云与Palantir平台对接、联合工程开发、高监管行业优先落地。技术实现上采用SAP认证插件,支持双向数据交互和实时业务动作触发。该合作突破了传统ERP系统局限,将业务语义与AI执行相结合,特别适合制造业供应链优化、财务争议处理等高价值场景,为企业在云迁移过程中实现业务连续性与智能化升级提供新范式。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 192

【微信小程序-uniapp】CustomPicker 自定义单项选择器组件

自定义底部弹出框单项选择器组件,适用于uniapp小程序

Komorebi_00的博客 1532

JAVA刷题记录: 专题十五 BFS解决FloodFill算法

【代码】JAVA刷题记录: 专题十五 BFS解决FloodFill算法。

yonpiguxiao的博客 221

YOLOv12改进专栏目录 | 本专栏持续更新500+篇内容 | 包含各种卷积、主干网络、各种注意力机制、检测头、损失函数、小目标检测改进、二次创新模块、独家创新等几百种创新点改进

《YOLOv12高效涨点改进专栏》提供500+创新改进方案,涵盖卷积、主干网络、注意力机制等模块优化,适用于检测、分割等任务。改进点来自顶会论文和个人经验,支持多种模型版本和任务场景。专栏包含详细教程、数据集增强、性能评估工具等,帮助科研人员快速实现模型优化和论文发表。提供完整运行项目和环境配置指导,适合计算机及相关专业研究人员使用,持续更新保障长期科研需求。

Ai缝合怪、助力小伙伴高效发论文 2301

C++优选算法十五 BFS解决Flood Fill算法

BFS算法,即广度优先搜索算法(Breadth-First Search),是一种用于图的遍历或搜索树的算法。

m0_74826386的博客 1301

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【算法】常见基础算法

常见算法:双指针、滑动窗口、前缀和、二分、分治归并、分治快排、BFS、DFS、递归、回溯、FloodFill等

志之所趋,无远弗届,穷山距海,不能限也 1328

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【第十五届蓝桥杯备赛(bushi,写文凑个数)】蓝桥OJ---长草

蓝桥杯省赛,都多余了?

你的博客 879

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 199

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 308

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 569

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 20

C语言程序设计题|有序数组插入数字冒泡排序

题目要求将一个数插入有序数组末尾,并用冒泡排序实现整体升序。代码先将输入数存入数组最后位置,再通过双重循环进行冒泡排序,每轮将较大元素向后移动,最终输出11个升序元素。该方法虽时间复杂度为O(n²),但符合题目要求,逻辑清晰,适合初学者理解排序原理。

2301_81429079的博客 748

【算法拾光】模拟|外观数列 + 数青蛙

本文总结两道模拟题解法:外观数列通过迭代统计连续数字个数生成下一项,关键在于处理末尾字符;数青蛙则模拟青蛙叫声“croak”状态转移,维护各阶段青蛙数量,记录最大并发数并确保全部完成。共性在于严格遵循流程、细致处理边界与非法情况,锻炼字符串遍历与状态管理能力。

wuqingyigexiaoba的博客 367

牛客周赛165C题(前后缀性质,递推,排序,枚举)

题目大意:给定长度为 `n` 的数组,选择 `k ∈ [1,n]`,将前 `k` 个元素整体翻转,后面的元素不变。要求操作后的整个数组非递减,统计满足条件的 `k` 的数量。题目链接:https://ac.nowcoder.com/acm/contest/141721/C。时间复杂度:O(nlogn)

2501_94316951的博客 170

【数据结构-3】算法美学之降复杂度

在while循环的循环体内,首先用临时变量保存最后一个位置的数据,再通过for循环把所有元素往后移动一位,最后把tmp中保存的值放到下标为0的位置上去。方法二的思路是:创建新数组,让原数组中后k个数据移动到新数组中前面的位置,让原数组中前numsSize-k个数据移动到新数组中后面的位置,这。这段代码的思路是:三次逆置,第一次逆置前numsSize-k个数据,第二次逆置后k个数据,最后整体逆置。这篇博文分享一道解法不一的算法题,求解过程的目的在于降低算法的时间复杂度,题源力扣。,属于空间换时间的操作。

weixin_44218929的博客 82

算法61,判定是否为字符重排

两字符串能互为重排 ⇔。

sheshibenniaodan的博客 207

算法日常・每日刷题--<动态规划>32

给定严格递增的正整数数组,求最长斐波那契子序列长度。使用二维DP,dp[i][j]表示以arr[i]、arr[j]为最后两项的序列长度,初始化均为2。通过哈希表快速查找前一项target = arr[j] - arr[i],若存在且下标小于i,则状态转移:dp[i][j] = dp[k][i] + 1。遍历更新全局最大长度,最终若结果小于3则返回0。时间复杂度O(n²),空间复杂度O(n²)。

2503_92261635的博客 178
上一篇: 优先算法专题十四——优先级队列(堆)
下一篇: 优先算法专题十六——BFS解决最短路径问题
溪苏.
博客等级 码龄3年 995粉丝 138原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值