2016-04-05 2 views
0

ich versuche, ein Diagramm Problem mit einer rekursiven Methode zu lösen eine richtige Lösung zurückkehrt, aber ich frage mich, ob es möglich ist, dies zu tun, weil in einer Rekursion den Zustand eines Graphen zu ändern level wird es auf anderen Ebenen ändern, da sie sich auf dasselbe Objekt beziehen. Gibt es eine Möglichkeit, es zu lösen?rekursive Methode ein Diagramm mit ändert sich der Zustand auf allen Ebenen

Hier sind meine Code-Beispiele:

1) Knoten - hier können Sie sehen, dass Knoten Erstellen von Kanten

public class Node{ 

private int visited;       
private int label;       
private int order;       
private int degree;       
private ArrayList <Node> neighbours;   
... 
} 

2) Graph binded sind

public class Graph { 

private ArrayList <Square> graph;  
private int graphSize;       
private int numOfVertices; 
... 
} 

3) Und die Skizze einer Methode:

public boolean backTracking(int label, int moves, Graph graph){  

// something here 

if(current.getVisited() != 1){ 

      // current is a next neighbor of a vertex 
      if(backTracking(current.getLabel(),completedMoves, graph)) 
       return true; 
} 

return false; 
+2

Im Allgemeinen gibt es zwei Möglichkeiten, das Zurückverfolgen zu implementieren: (1) Wenn Sie die Zurückverfolgung durchführen, machen Sie alle Änderungen rückgängig, die bei der Weiterleitung gemacht wurden. (2) Nehmen Sie nur Änderungen vor, die Sie bei der Rückverfolgung billig verwerfen können, indem Sie z. B. die Daten bei jedem Schritt kopieren, die möglicherweise rückgängig gemacht werden müssen, oder indem Sie den Status des Algorithmus getrennt vom Status der Datenstruktur verfolgen. –

+0

Danke, das hat für mich funktioniert. – michszm

Antwort

0

Ich bin mir nicht sicher, was Ihr "Grafikproblem" ist, aber wenn Sie zusätzliche Informationen pro Level nachverfolgen müssen, dann verwenden Sie einen Stapel (drücken Sie, wenn Sie einen Level runter gehen, Pop beim Hochgehen).

Wenn Sie zusätzliche Informationen pro Knoten speichern müssen, dann können Sie entweder platzieren Sie es in Node-Klasse, oder es in einer Map halten. Sie können auch Einträge in der Map während des Zurückverfolgens bereinigen.

Verwandte Themen