Bonjour !
Je cherche un peu d'aide pour une fonction de remplissage qui fonctionnerais comme le pot de peinture des logiciels graphiques.
J'ai réussi à avoir un code fonctionnel mais si la zone à remplir est trop grande j'ai droit à un joli StackOverflowError. Ce n'est pas un problème de "boucle infinie" mais de trop grande récursivité (si je prend une zone plus petite tout vas bien, mais je doit pouvoir gérer de grandes zones)
Ma question étant : quelqu'un pourrait convertir ce code pour obtenir la même chose en non-récursif ?
Cette grille me sert à avoir un rendu graphique en pixel par pixel, donc voilà un exemple de ce qui est voulu (les pixels noirs sont à true et les autres à false) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 public void fillGrid(Point point) { // grid est un boolean[][] sans limite de taille fillBlockedArea(point, !grid[point.x][point.y]); } private void fillGrid(Point point, boolean set) { grid[point.x][point.y] = set; if (point.x - 1 > 0) { if (grid[point.x - 1][point.y] != set) fillGrid(new Point(point.x - 1, point.y), set); } if (point.x + 1 < grid.length) { if (grid[point.x + 1][point.y] != set) fillGrid(new Point(point.x + 1, point.y), set); } if (point.y - 1 > 0) { if (grid[point.x][point.y - 1] != set) fillGrid(new Point(point.x, point.y - 1), set); } if (point.y + 1 < grid[point.x].length) { if (grid[point.x][point.y + 1] != set) fillGrid(new Point(point.x, point.y + 1), set); } }
(Pour résumer : cette fonction fonctionne mais il faudrait un équivalent non-récursif)
Partager