2017-06-30 5 views
0

Ich übe auf DFS, aber mein Code ging irgendwo schief, dass ich nicht beheben kann. Hier ist mein Code:Durchführung Tiefe erste Suche

public static <T> void doSearch(Dimension start, Dimension end, char[][] grid) { 
    System.out.println(start); 
    while (true) { 
     if (checkEqual(start, end)) { 
      break; // stop searching 
     } 
     getPossibleMoves(start, grid); 
     doSearch(moves.pop(), end, grid); 
    } 
} // the end 

In meinem doSearch() Methode, ich habe die „bewegt“ Stapel bewegt zu speichern, die possibleMoves() Verfahren die möglichen Züge zu finden, die Sie aus dem „Start“ machen. Aber wenn die Methode checkEqual() prüft, dass ich das Ziel erreicht habe, bricht sie aus der while-Schleife aus und geht zum Ende, kehrt aber immer noch zur while-Schleife zurück, so dass die doSearch()-Methode niemals stoppt. Wo mache ich den Fehler?

+0

Werfen Sie einen Blick auf [fragen] und [MCVE] – pvg

Antwort

0

Die Logik der Methode ist falsch. Stellen Sie sich vor, dass die "checkEquals" in der ersten Iteration der while-Schleife "false" ergeben und Sie die möglichen Züge erhalten, dann suchen Sie nach der ersten möglichen Bewegung. In der nächsten Iteration würde das Gleiche passieren: Das "checkEqual" wird false zurückgeben und Sie werden mögliche Züge neu erzeugen und Sie werden eine Suche nach dem ersten möglichen Zug durchführen! Das wird für immer passieren.

Verwandte Themen