洪水填充算法_Flood Fill (洪水填充、泛洪填充、油漆桶)算法Java循环实现(BFS方式,非递归)...
什么是Flood Fill (洪水填充、泛洪填充、油漆桶算法)
从一个区域中提取若干个连通的点与其他相邻区域区分开(或分别染成不同颜色)的经典算法。
因为其思路类似洪水从一个区域扩散到所有能到达的区域而得名。
详细解释: 维基百科Flood Fill
实现(油漆桶)四通实现
import java.util.LinkedList;
public class FloodFill {
protected int[][] colors; // 颜色池
protected int x, y; // 二维数组(图片)大小
/* 记录点 */
private final class Point {
int x, y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
}
/**
* 设置二维数组(图片)
* @param colors 二维数组,模拟图片每个点的颜色
* @param x 图片x轴大小
* @param y 图片y轴大小
*/
public void setColors(int[][] colors, int x, int y) {
this.colors = colors;
this.x = x;
this.y = y;
}
/**
* floodFill(BFS),选中坐标(cx,cy)必须为有效点
*
* @param cx x 坐标
* @param cy y 坐标
* @param newColor 新颜色
*/
public final void floodFill(int cx, int cy, int newColor) {
final LinkedList q = new LinkedList<>();
q.offer(new Point(cx, cy));
final int color = colors[cx][cy];
colors[cx][cy] = newColor;
while (!q.isEmpty()) {
final Point inner = q.poll();
int x = inner.x;
int y = inner.y;
x++;
if (x < this.x && color == colors[x][y]) {
colors[x][y] = newColor;
q.offer(new Point(x, y));
}
x -= 2;
if (x >= 0 && color == colors[x][y]) {
colors[x][y] = newColor;
q.offer(new Point(x, y));
}
x++;
y++;
if (y < this.y && color == colors[x][y]) {
colors[x][y] = newColor;
q.offer(new Point(x, y));
}
y -= 2;
if (y >= 0 && color == colors[x][y]) {
colors[x][y] = newColor;
q.offer(new Point(x, y));
}
}
}
}
测试(简单使用)
public static void main(String[] args) {
int[][] colors = new int[][]{
{0, 1, 2, 1, 1, 1},
{2, 1, 4, 1, 2, 1},
{3, 1, 1, 1, 5, 2},
{5, 0, 1, 0, 1, 9},
{5, 8, 2, 0, 1, 1},
{5, 0, 8, 0, 7, 2}
};
FloodFill floodFill = new FloodFill();
floodFill.setColors(colors, 6, 6);
floodFill.floodFill(1, 1, 6);
for (int[] c : colors) {
for (int dot : c)
System.out.print(dot + ", ");
System.out.println();
}
}
/*
******************************
* 测试结果
******************************
* 0, 6, 2, 6, 6, 6,
* 2, 6, 4, 6, 2, 6,
* 3, 6, 6, 6, 5, 2,
* 5, 0, 6, 0, 1, 9,
* 5, 8, 2, 0, 1, 1,
* 5, 0, 8, 0, 7, 2,
******************************
*/
洪水填充算法_Flood Fill (洪水填充、泛洪填充、油漆桶)算法Java循环实现(BFS方式,非递归)...相关推荐
- java 画图油漆桶_Flood Fill (洪水填充、泛洪填充、油漆桶)算法Java循环实现(BFS方式,非递归)...
什么是Flood Fill (洪水填充.泛洪填充.油漆桶算法) 从一个区域中提取若干个连通的点与其他相邻区域区分开(或分别染成不同颜色)的经典算法. 因为其思路类似洪水从一个区域扩散到所有能到达的区域 ...
- OpenCV中泛洪填充算法解析与应用
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:opencv学堂 泛洪填充(Flood Fill)很多时 ...
- 0092 经典算法系列——泛洪填充(FloodFill)
泛洪填充(FloodFill)问题在图像处理中非常常用,它和连通图的概念相似.最近在YouTube看 Patrick Shyu (TechLead)的视频,他讲他在谷歌面试别人的时候,常会出一道泛洪填 ...
- OpenCV---ROI(region of interest)和泛洪填充
一:ROI 感兴趣区(Region of Interest,ROIs) 是图像的一部分,它通过在图像上选择或使用诸如设定阈值(thresholding) 或者从其他文件(如矢量> 转换获得等方法 ...
- 二分查找算法(递归与非递归两种方式)
首先说说二分查找法. 二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回1,失败返回对应的数组下标. 采用非递归方式完成二分查找法.java代码如下 ...
- 【Java数据结构与算法】第十七章 二分查找(非递归)和分治算法(汉诺塔)
第十七章 二分查找(非递归)和分治算法(汉诺塔) 文章目录 第十七章 二分查找(非递归)和分治算法(汉诺塔) 一.二分查找 1.思路 2.代码实现 二.分治算法(汉诺塔) 1.概述 2.汉诺塔 一.二 ...
- 二叉树非递归后序遍历算法(C语言)
二叉树非递归后序遍历算法(C语言) 二叉树后序遍历的规律:左右根 后序非递归遍历中,访问根(子根)结点有两种情况 ①:遍历完左子树,需要遍历右子树,需要从栈中访问最顶上的根(子根)结点从而得到右子树的 ...
- 洪水填充算法_Android图像处理之泛洪填充算法
泛洪填充算法(Flood Fill Algorithm) 泛洪填充算法又称洪水填充算法是在很多图形绘制软件中常用的填充算法,最熟悉不过就是windows paint的油漆桶功能.算法的原理很简单,就是 ...
- 图像处理------泛洪填充算法(Flood Fill Algorithm) 油漆桶功能
泛洪填充算法(Flood Fill Algorithm) 泛洪填充算法又称洪水填充算法是在很多图形绘制软件中常用的填充算法,最熟悉不过就是 windows paint的油漆桶功能.算法的原理很简单,就 ...
最新文章
- dr优先级默认_当配置一个CISCO的路由器时,缺省的DR和BDR优先级是()。
- R 语言关于 SSL 证书异常处理笔记
- linux基础-第十六单元 yum管理RPM包
- c语言函数与指针,C语言指针与函数篇
- pythondef元组参数传递_Python参数传递(传值传引用)
- SpringBoot 2.1.5(38)---热部署(devtools)配置操作
- js日期时间控件------layDate
- RS232引脚定义及串口通信中与USB等转接
- bugzilla mysql_使用Mysql 5.6.11安装Bugzilla 4.2.5
- 小黄鸡QQ空间自动回复机器人
- 身份证号码中出生年月的提取
- Word文档引用EndNote中文献的方法
- 数据分析法之对比分析法
- JAVA面向对象(2)
- mysql8.0源代码解析_源码解读:MySQL 8.0 InnoDB无锁化设计的日志系统
- 设置窗口颜色保护眼睛(win7/xp)
- Python调用Windows API实现文本朗读
- Matlab小波去噪——基于wden函数的去噪分析
- 三维凝视估计,没有明确的个人校准2018
- 保存Windows10屏保
热门文章
- ipconfig和ping 命令的各种参数
- php 越权 漏洞,PHPYUN最新版多处SQL注入及越权操作二
- Toolbar详解 · Material Design Part 2
- spl_autoload_register 注册自己的自动加载函数(__autoload())
- 一款猥琐的PHP后门分析
- 使用netty实现聊天室功能
- JVM优化系列-JVM G1 垃圾收集器
- 年底了,按约定把2021 Go面试八股整理全了
- 如何在Hyper-V上安装Centos7
- MQ如何防止消息丢失