A mátrix, ahol az összes kezdőpozícióval szomszédos és azonos színű elem helyett a kitöltési szín található.
FloodFill(grid, x, y, new_color): old_color = grid ha old_color == new_color: térj vissza FloodFillUtil(grid, x, y, old_color, new_color) FloodFillUtil(grid, x, y, old_color, new_color): ha x < 0 vagy x >= grid.méret vagy y < 0 vagy y >= grid.méret: térj vissza ha grid != old_color: térj vissza grid = new_color FloodFillUtil(grid, x+1, y, old_color, new_color) FloodFillUtil(grid, x-1, y, old_color, new_color) FloodFillUtil(grid, x, y+1, old_color, new_color) FloodFillUtil(grid, x, y-1, old_color, new_color)
def flood_fill(grid, x, y, new_color):
rows, cols = len(grid), len(grid)
old_color = grid
if old_color == new_color:
return grid
def fill(x, y):
if x < 0 or x >= rows or y < 0 or y >= cols or grid != old_color:
return
grid = new_color
fill(x + 1, y)
fill(x - 1, y)
fill(x, y + 1)
fill(x, y - 1)
fill(x, y)
return grid
# Példa használat
grid = [
,
,
]
x, y = 1, 1
new_color = 2
result = flood_fill(grid, x, y, new_color)
for row in result:
print(row)
Kimenet:
#include <iostream>
#include <vector>
using namespace std;
void floodFillUtil(vector<vector<int>>& grid, int x, int y, int oldColor, int newColor) {
int rows = grid.size();
int cols = grid.size();
if (x < 0 || x >= rows || y < 0 || y >= cols || grid != oldColor) {
return;
}
grid = newColor;
floodFillUtil(grid, x + 1, y, oldColor, newColor);
floodFillUtil(grid, x - 1, y, oldColor, newColor);
floodFillUtil(grid, x, y + 1, oldColor, newColor);
floodFillUtil(grid, x, y - 1, oldColor, newColor);
}
void floodFill(vector<vector<int>>& grid, int x, int y, int newColor) {
int oldColor = grid;
if (oldColor != newColor) {
floodFillUtil(grid, x, y, oldColor, newColor);
}
}
int main() {
vector<vector<int>> grid = {
{1, 1, 1},
{1, 1, 0},
{1, 0, 1}
};
int x = 1, y = 1, newColor = 2;
floodFill(grid, x, y, newColor);
cout << "Kitöltött mátrix:" << endl;
for (const auto& row : grid) {
for (int cell : row) {
cout << cell << " ";
}
cout << endl;
}
return 0;
}
Kimenet:
Kitöltött mátrix: 2 2 2 2 2 0 2 0 1
Az elárasztásos kitöltés egy alapvető algoritmus, amely képfeldolgozásban, játékmenet-szimulációkban és térképi alkalmazásokban gyakran előfordul.