2017-06-08 4 views
0

Ich habe eine dfs-Suche nach einem 8-Puzzle-Spiel implementiert, aber aus irgendeinem Grund kann ich es nicht so machen, wie es sollte, mein Stack fügt hinzu und fügt mögliche Bewegungen für mein 8-Puzzle-Spiel hinzu, aber es wird nie für eine Antwort verringert Ich weiß nicht, ob es normal ist oder nicht, aber hier ist mein Code für den Fall, dass mir jemand helfen kann.Was ist los mit meiner DFS-Implementierung?

Der Code ist nicht vollständig optimiert Ich weiß, ich möchte nur wissen, warum es nicht funktioniert, wie ein dfs sein sollte, danke.

function depthFirstSearch(currentState, finalState) 
{ 
    var stack = []; 
    var visited = []; 
    delete currentState["prev"]; 
    stack.push(currentState); 
    while(stack.length) 
    { 
    var node = stack.pop(); 
    visited.push(node); 
    if(compare(node, finalState)) 
    { 
     return visited; 
    } 
    else 
    { 
     var successors = getSuccessors(node); 
     for(var i = 0; i < successors.length; i++) 
     { 
     delete successors[i]["prev"]; 
     } 
     var realSuccessors = []; 
     for(var i = 0; i < visited.length; i++) 
     { 
     for(var j = 0; j < successors.length; j++) 
     { 
      if(compare(successors[j], visited[i])) 
      { 
      continue; 
      } 
      else 
      { 
      realSuccessors.push(successors[j]); 
      } 
     } 
     } 
     for(var i = 0; i < realSuccessors.length; i++) 
     { 
     stack.push(realSuccessors[i]); 
     } 
     console.log(stack.length); 
    } 
    } 
} 

Antwort

0

Ich werde mich beantworten, da ich, dass die Anzahl der Kombinationen realisiert, dass im angesichts meine Graph in der Tiefe durchquert mich von Kombinationen zu einer unendlichen oder langer Zahl führen könnte und nie die Lösung erreichen, da ich bin Da ich nur in eine Richtung gehe, habe ich über ein iteratives DFS nachgedacht, bei dem jedes Kind nach Ebenen durchlaufen wird.