2017-05-11 4 views
-2

グラフ上で(ブール値行列を使用して)いくつかの基本関数を実行しようとしています。彼らはすべてDFSのものを除いて動作します。それは私にいくつかの乱数を与える。私はこの問題を数時間から解決しようとしていますが、まだ何もありません。(コードはコンパイルされていますが、間違って表示されています)。 Btwの場合、DFSの結果は、スタックの数と各グラフ頂点の「巻き戻し」を伴う行列でなければなりません。DFS反復関数が正常に動作しない

私のエラーはどこですか?

私のプログラム:

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

私が正しくあなたのコードを読めば、それはmark[i][0]する必要があります:

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

結果:[リンク](http://puu.sh/vNa5O/f630091c27.png) このグラフのうち、[リンク](http://puu.sh/vN9V6/b70c3f1d4c.png)とIメインでこれをしています: 'int [] [] r2 = g3.DFS(0); (i + ":" + "r2 [i] [0] +" | "+ r2 [i] [1])に対する(int i = 0; i

+0

私の変数「decouvert」は「発見」を意味し、 –

答えて

0

まあ、私は1つの問題はラインだと思います。そして、あなたがすでにそのノードにいたとしても、それを有効に無効にする前に値を上書きするだけです。

関連する問題