flood fill代码模板
时间: 2023-03-28 17:03:50 浏览: 73
以下是 flood fill 的代码模板:
void floodFill(int x, int y, int oldColor, int newColor) {
if (x < || x >= n || y < || y >= m) return;
if (grid[x][y] != oldColor) return;
grid[x][y] = newColor;
floodFill(x + 1, y, oldColor, newColor);
floodFill(x - 1, y, oldColor, newColor);
floodFill(x, y + 1, oldColor, newColor);
floodFill(x, y - 1, oldColor, newColor);
}
相关问题
CShap flood fill 源代码
以下是C#语言的Flood Fill算法源代码:
```
using System;
using System.Collections.Generic;
using System.Drawing;
namespace FloodFillAlgorithm
{
public class FloodFill
{
private Bitmap _bitmap;
private Color _fillColor;
private Color _targetColor;
public FloodFill(Bitmap bitmap)
{
_bitmap = bitmap;
}
public void Fill(int x, int y, Color fillColor)
{
_fillColor = fillColor;
_targetColor = _bitmap.GetPixel(x, y);
if (_fillColor == _targetColor)
return;
Queue<Point> pixels = new Queue<Point>();
pixels.Enqueue(new Point(x, y));
while (pixels.Count > 0)
{
Point currentPixel = pixels.Dequeue();
if (currentPixel.X < 0 || currentPixel.X >= _bitmap.Width || currentPixel.Y < 0 || currentPixel.Y >= _bitmap.Height)
continue;
if (_bitmap.GetPixel(currentPixel.X, currentPixel.Y) != _targetColor)
continue;
_bitmap.SetPixel(currentPixel.X, currentPixel.Y, _fillColor);
pixels.Enqueue(new Point(currentPixel.X - 1, currentPixel.Y));
pixels.Enqueue(new Point(currentPixel.X + 1, currentPixel.Y));
pixels.Enqueue(new Point(currentPixel.X, currentPixel.Y - 1));
pixels.Enqueue(new Point(currentPixel.X, currentPixel.Y + 1));
}
}
}
}
```
此代码实现了基本的Flood Fill算法,使用了一个队列来存储待处理的像素点。每次从队列中取出一个像素点,检查它是否在位图范围内以及是否与目标颜色相同,如果是,则将其颜色设置为填充颜色,并将其周围的像素点加入队列中等待处理。
flood fill
Flood Fill算法是一种对连通区域进行着色的算法,它从一个起点开始,将相邻的区域都标记上同样的颜色。它通常被用来填充或者着色图像中的封闭区域,比如说在绘图软件中使用它来填充闭合的多边形区域。Flood Fill算法包括四个基本步骤:选择一个起点,标记起点颜色,将与起点相邻且颜色相同的区域标记上同样的颜色,重复第三步直到没有相邻的区域可以被标记。
本文提到的Flood Fill算法实现有两个版本,一个是使用BFS(广度优先搜索)实现,另一个是使用DFS(深度优先搜索)实现。在实际应用中,可以根据具体情况选择合适的算法实现。