0

私は再帰と二次元配列を使用して、隣接行列で深さの最初の検索を実装して問題を起こそうとしています。私はまだこれに新しい、ごめんなさい私の間違いがあまりにも明らかである場合。隣接関係を使用した深さの最初の検索?

すべての数字がすべて0で、訪問したコンポーネントが表示されない場合、マイコードで行が読み取られません。

たとえば、行に1秒、列(9,6)および(6,9)しかない10x10のマートリックス。他のすべては、それが出力ここ

Component: 1 
Component: 2 
Component: 3 
Component: 4 
Component: 5 
Component: 6 9 
Component: 7 
Component: 8 
Component: 10 
Total number of Components: 9 

は、これまでのところ、私の方法であるべきで0

です。

public static void dfs(int i, int[][] G) { 
    boolean [] visited = new boolean[10]; 

    if(!visited[i]){   
     visited[i] = true; // Mark node as "visited" 
     System.out.println("Compnent: "); 
     System.out.println(i+1 + " "); 

     for (int j = 0; j < G[i].length-1; j++) { 
      if (G[i][j]==1 && !visited[j]) { 
       dfs(j, G); // Visit node 
      } 
     } 
    } 
} 

上記のものがコンポーネント1であり、メソッドが停止するだけです。

+0

あなたはDFSメソッドを呼び出す方法を見せてください! –

+0

私はそれをdfs(0、array)を使って呼び出します。主な方法で。 arrayは2次元行列です。 – JohnMurphy27

答えて

0

例では、最初のノードと他のノードの間に接続はありません。したがって、最初のノードからどこにも行くことはできません。

コードはこのようなものでなければなりません:

public static void dfs(int i, int[][] graph, boolean[] visited) { 
    if(!visited[i]){   
     visited[i] = true; // Mark node as "visited" 
     System.out.print(i+1 + " "); 

     for (int j = 0; j < graph[i].length; j++) { 
      if (graph[i][j]==1 && !visited[j]) { 
       dfs(j, graph, visited); // Visit node 
      } 
     } 
    } 
} 

public static void main(String[] args) { 
    // your matrix declare 
    boolean [] visited = new boolean[10]; 
    int count = 0; 
    for(int i = 0; i < graph.length; i++) { 
     if(!visited[i]) { 
      System.out.println("Compnent: "); 
      dfs(i,graph,visited); 
      ++count; 
     } 
    } 
    System.out.println("Total number of Components: " + count); 
} 
関連する問題