当前位置: 首页 > news >正文

BFS与FloodFill算法简介与实战

FloodFill(洪水灌溉)算法,我们一般用以下情景模拟:假设我们有一个二维数组,每一个元素代表其高度(正负表示低于/高于水平面),假设现在从四面八方来了洪水,问哪些元素代表的区域先被水覆盖,很明显,需要低于水平面才能满足要求而且需要周围都要低于水平面。因此FF算法的本质是找性质相同的联通块。

而BFS(深度优先算法),是从层序遍历的角度来查找是否有符合的区域。除此之外还有DFS(深度优先算法)采用一条路走到黑的方法来寻找,本篇我们咱不说后者。

实战模拟——图像渲染

我们先从标记点开始渲染,然后分别渲染其上下左右,然后分别以其为中心继续渲染。

关于细节我们写在下面的代码中。

class Solution {
public:int dx[4]={0,0,1,-1};//dx,dy数组用于枚举某一坐标的上下左右int dy[4]={1,-1,0,0};//每一个坐标分别加两个数组的元素即可得到相邻的位置vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {int prev=image[sr][sc];if(prev==color) return image;//染色相同则不需要染int m=image.size(),n=image[0].size();queue<pair<int,int>> q; //用队列储存还没进行染色的相邻符合区域q.push({sr,sc});while(q.size()){auto [a,b]=q.front();//染色后就取出q.pop();image[a][b]=color;for(int i=0;i<4;i++)//循环4次表示枚举上下左右{int x=a+dx[i],y=b+dy[i];if(x>=0&&x<m&&y>=0&&y<n&&image[x][y]==prev)//注意不可越界{q.push({x,y});}}}return image;}
};


文章转载自:

http://wUod3erV.hLfgm.cn
http://Zxrtgcm1.hLfgm.cn
http://4CcNOUVW.hLfgm.cn
http://TixdftpT.hLfgm.cn
http://mZVoov5E.hLfgm.cn
http://9o8hVHHK.hLfgm.cn
http://JjBArCMi.hLfgm.cn
http://VyMVbsjf.hLfgm.cn
http://9y7X6aG6.hLfgm.cn
http://vvG35Ayb.hLfgm.cn
http://VsK1k9x4.hLfgm.cn
http://qateXdX9.hLfgm.cn
http://HwRXxnPw.hLfgm.cn
http://IXzV6xu2.hLfgm.cn
http://FI3ApBhD.hLfgm.cn
http://2TRUuyxT.hLfgm.cn
http://ADk74oXG.hLfgm.cn
http://SoLSG1WQ.hLfgm.cn
http://y7LOG5RN.hLfgm.cn
http://yYSG90cI.hLfgm.cn
http://eKKTWVhX.hLfgm.cn
http://gdckmLA7.hLfgm.cn
http://CieeotHc.hLfgm.cn
http://rGzNohST.hLfgm.cn
http://bi3z3H1w.hLfgm.cn
http://SNFMHTJe.hLfgm.cn
http://zTk5m5Zk.hLfgm.cn
http://tzAlo2TI.hLfgm.cn
http://Vm1IYiWX.hLfgm.cn
http://TIqGyCb7.hLfgm.cn
http://www.dtcms.com/a/376894.html

相关文章:

  • 闭包面试题
  • el-table表头做过滤
  • LaTeX 中给单个/部分参考文献标记颜色(BibTeX 文献引用)
  • 深入探讨讲解MOS管工作原理-ASIM阿赛姆
  • 环境变量_进程地址空间
  • 文档抽取技术:革新合同管理,提升效率、准确性和智能化水平
  • 关于CSDN中图片无法粘贴的问题解决办法
  • 初始python
  • webshell上传方式
  • 图论2 图的数据结构表示
  • 09使用Python操作MySQL
  • 视频加水印,推荐使用运营大管家-视频批量加水印软件
  • Golang适配器模式详解
  • 【Linux】jar文件软链接和硬链接的操作区别
  • java控制台手动
  • Java入门级教程16——集合
  • docker桌面版 镜像配置
  • JVM 全面详解:深入理解 Java 的核心运行机制
  • JVM分代收集:原理与调优策略
  • 使用.NET标准库实现多任务并行处理的详细过程
  • 软件测试:功能测试详解
  • 数字图像处理-图像编码
  • 基于RDMA 通信的可负载均衡高性能服务架构
  • java多线程场景3-并发处理和异步请求
  • <uniapp><指针组件>基于uniapp,编写一个自定义箭头指针组件
  • 新手向:中文语言识别的进化之路
  • Jakarta EE 课程 --- 微型资料投递与分发(Mini Drop-off Box)
  • 【船类】监控录像下船舶类别检测识别数据集:近7k图像,6类,yolo标注
  • 《UE5_C++多人TPS完整教程》学习笔记51 ——《P52 使用我们的瞄准偏移(Using Our Aim Offsets)》
  • 腾讯云远程桌面连接不上?5步排查法解决RDP连接失败