Je rencontre des problèmes de stackoverflow et j'espère que quelqu'un pourra me donner un aperçu d'une solution non-moins récursive.Problèmes de traversée de tableaux récursifs
Ident[][] map = ...
private int explore(Ident item, int xcoord, int ycoord) {
if ((map[xcoord][ycoord] == null) || !map[xcoord][ycoord].equals(item))
return 0;
map[xcoord][ycoord] = null;
int sumX, sumY, counter = 1;
item.translate(xcoord, ycoord);
for (int y = -1; y <= 1; y++)
for (int x = -1; x <= 1; x++) {
sumX = x + xcoord;
sumY = y + ycoord;
if (((y != 0) || (x != 0)) && (sumX >= 0) && (sumX < map.length) &&
(sumY >= 0) && (sumY < map.[0].length))
counter += explore(item, sumX, sumY);
}
}
}
return counter;
}
Cette méthode reçoit un tableau bidimensionnel d'objets Ident, une identité cible et une position de départ dans le tableau. Il parcourt récursivement le tableau en comptant la taille d'une zone continue occupée par l'Ident. Il centre également l'élément Ident entré au milieu de la zone. En faisant une boucle sur la matrice de cartes et en appelant la méthode explorer sur des éléments non nuls, je peux construire un tableau d'éléments Ident centrés dans leurs zones, et avec des tailles relatives à leurs zones.
On peut voir qu'avec n'importe quoi mais de petites cartes, la pile débordera.
Quelqu'un at-il une autre méthode pour accomplir la même tâche? Ou un aperçu pour m'aider à en trouver un?
C'était assez proche, merci beaucoup d'avoir pris le temps de le faire. – Andrew