2011-11-11 7 views
2

を使用して、以下のグラフの深さ優先の再帰的トラバースは:私が理解から幅優先トラバーサル私は最初、第1の深さを幅を書いてADJマトリックス

enter image description here

は、トラバースはする必要があります0 1 3 6 4 5 2 ...しかし、私は深さの最初のトラバーサルのためにそれを得て、dfs(再帰的な)とBFSのために、私は得ている0 1 3 6 2 4 5。問題を解決するために私がしなければならないことがあります。 BFSにスニペットを以下について

クラス

public void depthFirst(int vFirst,int n, int[] isvisited) 
    {  //vFirst = 0, n = 6 
    int v,i; 
    // st is a stack 
    st.push(vFirst); 

    while(!st.isEmpty()) 
    { 
     v = st.pop(); 
     if(isvisited[v]==0) 
     { 
      System.out.print(v); 
      isvisited[v]=1; 
     } 
     for (i = 0; i <= n; i++) 
     { 
      if((adjMatrix[v][i] == 1) && (isvisited[i] == 0)) 
      { 
       st.push(v); 
       isvisited[i]=1; 
       System.out.print(" " + i); 
       v = i; 
      } 
     } 
    } 

}

public void depthFirstRecursive(int w) { 
    int j;  //w = 0; 

    visited[w] = 1; 
    if (w == 0) { 
     System.out.print(w + " "); 
    } 

    for (j = 0; j <= 6; j++) { 
     if ((adjMatrix[w][j] == 1) && (visited[j] == 0)) { 
      System.out.print(j + " "); 

      depthFirstRecursive(j); 
     } 

    } 
} 

public void breadthFirst(int first, int p) { 
    int e;  // first = 0; p = 6 
    int[] nodeVisited = new int[7]; 
    que.add(first); 


    while (!que.isEmpty()) { 
     e = que.remove(); 
     if(nodeVisited[e]==0) 
      { 
       System.out.print(e); 
       nodeVisited[e]=1; 
      } 
     for (int i = 0; i <= p; i++) 
      { 

       if((adjMatrix[e][i] == 1) && (nodeVisited[i] == 0)) 
       { 
        que.add(e); 
        nodeVisited[i]=1; 
        System.out.print(" " + i); 
        e = i; 
       } 
      } 

    } 



} 


public static void main(String[] args) { 



         // 1 2 3 4 5 6 7 
    int[][] adjMatrix = { {0, 1, 1, 0, 0, 0, 0}, 
          {1, 0, 0, 1, 1, 1, 0}, 
          {1, 0, 0, 0, 0, 0, 1}, 
          {0, 1, 0, 0, 0, 0, 1}, 
          {0, 1, 0, 0, 0, 0, 1}, 
          {0, 1, 0, 0, 0, 0 ,0}, 
          {0, 0, 1, 1, 1, 0, 0} }; 


     new myGraphs(adjMatrix); 
} 
+0

'st'と' que'はどのように定義されていますか? –

+2

あなたのグラフは向けられていますか?もしそうでなければ、無向グラフの正しい結果を得ることは困難です。 –

+0

@ThomasJungblut stはスタックであり、queはキューです = linkedlist TMan

答えて

2

を:

que.add(e); 
nodeVisited[i]=1; 
System.out.print(" " + i); 
e = i; 

彼らはなぜあなたはeを変更し、キューにeを追加するには?それは私には間違っているようです。

+0

それは私が隣接行列を検索する方法です。変更がなかった場合、それは0列しか検索しませんでした。 – TMan

+0

@Tman No.最初のループ行で 'e 'を変更します:' e = que.remove(); BFSがどのように機能するかを説明します。 [BFS](http://en.wikipedia.org/wiki/Breadth-first_search)をより深く調べてください。 –

+0

でも、すべてのトラバーサルメソッドを同じに印刷する必要がありますか? – TMan

0
public void BFS(int start) 
{ 
    int v=a.length;//a[][] is adj matrix declared globally 
    boolean visited[]=new boolean[v];//indexing done from 1 to n 
    LinkedList<Integer> queue=new LinkedList<Integer>(); 
    visited[start]=true; 
    queue.add(start); 
    while(queue.size()!=0) 
    { 
     int x=queue.remove(); 
     System.out.print(x+" "); 
     for (int i=1; i < v; i++) 
      if((a[x][i] == 1) && (!visited[i])) 
      { 
       queue.add(i); 
       visited[i]=true; 
      } 
    } 
} 
+1

あなたの答えをコメントしてください。可能な他のソリューションに匹敵するようにソリューションを記述してください。 –