Ich versuche einen Flood-Fill-Algorithmus zu erstellen, der die Anzahl der von Wänden eingeschlossenen Leerstellen zählt. Ich verwende ein 2D-String-Array und die Wände werden durch "1" dargestellt und die leeren Leerzeichen sind null. Idealerweise sollte der Algorithmus jeden String im Array überprüfen und an jedem Punkt zurückgeben, an dem der String an der Positionskarte [x] [y] nicht null ist, und die Anzahl der von Wänden eingeschlossenen Leerstellen zählen. Aber in der Minute bekomme ich eine extrem lange Nummer für die Anzahl der Zimmer und nicht sicher, wo ich falsch liege.Flood-Fill-Algorithmus, der Räume zählt
public static void floodFill(int x, int y, String oldChar, String newChar){
x = 0;
y=0;
if (x < 0 || y < 0 || x > map.length || y > map[0].length){
return;
}
if (map[x][y] != oldChar){
return;
}
map[x][y] = newChar;
// Recursive calls
floodFill(x - 1, y, oldChar, newChar);
floodFill(x +1, y, oldChar, newChar);
floodFill(x, y-1, oldChar, newChar);
floodFill(x, y+1, oldChar, newChar);
}
public static void getNumOfRooms(String map[][]){
roomCount = -1;
for(x = 0; x < map.length; x++){
for (y = 0; y < map[0].length; y++){
if (map[x][y] == null){
floodFill(x, y, null, "x");
roomCount+=1;
System.out.println(map);
}
}
}
Warum setzen Sie x und y am oberen Rand von floodFill() auf 0? – Barry
Sollten die floodFill-Parameter nicht (x + 1, y), (x-1, y), (x, y + 1), (x, y-1) sein? Sie haben einige fragwürdige Koord-Paarungen. Sollte roomCount auch nicht bei 0 beginnen? – Barry
Ich würde einen Array-außerhalb-Grenzen-Fehler erhalten, wenn ich nicht x und y auf 0 gesetzt hätte. Im Wesentlichen möchte ich, dass es das gesamte Array ab [0,0] durchsucht. Ja, die Paarungen sind korrigiert. roomCount ist bei -1, da es den Außenbereich als 1 Leerzeichen auch zählen soll –