0

隣接行列でDFSとBFSを実行するJavaでプログラムを作成しようとしています。私が今までにコンパイルして、これまでのところ希望する出力を与えるコードです。隣接行列DFSとBFS

しかし私は私のforループと関係があるかもしれないと感じる解決できないエラーを受けています。

次のようにエラーがある:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9 
     at GraphMatrix.dfVisit(GraphMatrix.java:304) 
     at GraphMatrix.dfVisit(GraphMatrix.java:306) 
     at GraphMatrix.dfVisit(GraphMatrix.java:306) 
     at GraphMatrix.DF(GraphMatrix.java:261) 
     at GraphMatrix.main(GraphMatrix.java:347) 

エラーは以下のスニペットであるコード:

private void dfVisit(int prev, int v) 
{ 
    visited[v] = ++id; 
    System.out.println("Visited vertex" + ": " + v + " Along edge : " + prev); 

    for (int u: adj[v]) { 
     if (visited[u] != visited[v]) { 

      dfVisit(prev, u); 
     } 
    } 
} 
:もしなステートメントからライン上

// method to initialise Depth First Traversal of Graph 
public void DF(int s) 
{ 
    id = 0; 

    for(int v = 1; v <= V; v++) { 
     visited[v] = 0; 

    } 
    dfVisit(0, s); //error being signaled here 

} 

そして第二

最後に、主にg.DF:

public static void main(String[] args) throws IOException 
{ 
    int s = 4; 
    String fname = "wGraph3.txt"; 

    GraphMatrix g = new GraphMatrix(fname); 

    g.display(); 

    g.DF(s); 


    g.BF(s); 

} 

}

任意の助けいただければ幸いです。

答えて

0

スタックトレースによると、式visited[u] != visited[v]を評価するときは、明らかにdfVisit()メソッドから例外がスローされます。コンテキストからは、配列visitedの境界外にあるuが発生していなければなりません(そうでなければ、例外は以前にスローされているはずです)。例外メッセージには、範囲外インデックス(9)の値が表示されます。

各値uがかかるためadj[v]の要素であり、adj[v]はあなたが間違ってその内容を解釈していることを他の不正なデータが含まれているか、と結論するのが妥当と思われます。私はそれがどうやってどうやっているのかしか推測できませんが、最初の推測では、adj[v]の要素は1ベースのインデックス(つまり、有効な最小配列インデックスが1であるかのように) 0ベースのインデックス作成。

+0

だからあなたは何を示唆している、この擬似コードオフ私のdfVisit方法を基づか.. が が訪れ始め 'グラフ:: dfVisit(頂点prevを、頂点V)[V] = ++ ID プリント「訪問頂点「 、「エッジに沿って「V、PREVは、 『 - 』 [U] dfVisit(U) End' –

+0

を訪問していない場合は、V 各頂点のためにuがADJ(V) を私は本当に、さらに何も言うことができません、 @AmyKelly。実装しようとしているアルゴリズム*に本質的に間違っているものはありません。むしろ、作業しているデータの解釈や実装の詳細に問題があるようです。あなたは私がすでに行っているよりも、誰かがより具体的になるために必要な情報を提示していません。 –

関連する問題