2017-05-11 2 views
-2

Ich versuche, einige grundlegende Funktion auf einem Diagramm (mit einer booleschen Matrix) zu tun. Sie alle arbeiten außer der DFS. Es gibt mir eine zufällige Nummer. Ich versuche dieses Problem seit einigen Stunden zu lösen, aber immer noch nichts .. (der Code kompiliert, aber was es falsch zeigt). Btw, das Ergebnis von DFS muss eine Matrix sein, mit der Anzahl der Stapel und auch dem "Abwickeln" jedes Diagrammscheitelpunktes.DFS iterative Funktion funktioniert nicht richtig

Wo ist mein Fehler?

Mein Programm:

public int[][] DFS(int s) { 

    Stack<Integer> stack = new Stack<Integer>(); 
    stack.push(s); 
    int recorder = 1; 
    int[][] mark = new int[nbs][2]; 

    mark[s][0] = recorder++; 

    boolean[] decouvert = new boolean[nbs]; 
    while (!stack.isEmpty()) { 
     s = stack.pop(); 
     mark[s][1] = recorder++; 
     if (!decouvert[s]) { 
      decouvert[s] = true; 
      for (int i = 0; i < nbs; i++) { 
       if (m[s][i]) { 
        stack.push(i); 
        mark[s][0] = recorder++; 
       } 
      } 
     } 
    } 

    return mark; 
} 
+0

Das ist das Ergebnis: [link] (http://puu.sh/vNa5O/f630091c27.png) Von diesem Graph: [link] (http://puu.sh/vN9V6/b70c3f1d4c.png) und ich mache das im Wesentlichen: 'int [] [] r2 = g3.DFS (0); für (int i = 0; i

+0

Meine Variable" decouvert "bedeutet" discover " –

Antwort

0

Nun, ich denke, ein Problem ist die Zeile:

mark[s][0] = recorder++;

Wenn ich Ihren Code richtig gelesen, es sollte mark[i][0] sein. Und dann überschreibt es einfach den Wert, selbst wenn Sie bereits in diesem Knoten gewesen sind, bevor Sie den Zähler dafür effektiv durcheinander gebracht haben.

Verwandte Themen