улучшен алгоритм заливки

This commit is contained in:
2026-04-10 01:11:24 +03:00
parent 4f08fdac2b
commit 8075ca113c

View File

@@ -16,15 +16,12 @@ public sealed class FloodFillService : IFloodFillService
return; return;
var queue = new Queue<(int X, int Y)>(); var queue = new Queue<(int X, int Y)>();
var visited = new bool[width * height];
queue.Enqueue((x, y)); queue.Enqueue((x, y));
visited[y * width + x] = true; pixels[y * width + x] = newColorIndex;
while (queue.Count > 0) while (queue.Count > 0)
{ {
var (cx, cy) = queue.Dequeue(); var (cx, cy) = queue.Dequeue();
pixels[cy * width + cx] = newColorIndex;
Span<(int, int)> neighbors = Span<(int, int)> neighbors =
[ [
@@ -37,9 +34,9 @@ public sealed class FloodFillService : IFloodFillService
if (nx < 0 || nx >= width || ny < 0 || ny >= height) if (nx < 0 || nx >= width || ny < 0 || ny >= height)
continue; continue;
int ni = ny * width + nx; int ni = ny * width + nx;
if (visited[ni] || pixels[ni] != targetIndex) if (pixels[ni] != targetIndex)
continue; continue;
visited[ni] = true; pixels[ni] = newColorIndex;
queue.Enqueue((nx, ny)); queue.Enqueue((nx, ny));
} }
} }