2017-06-19 59 views
0

我正在研究廣度優先搜索或BFS算法,並且我遇到了一個想法。我顯示了我已經實現BFS的圖的樹結構。現在,也許我可以只顯示在使用鏈表不同的方式樹形結構,但我想修改我使用的顯示樹狀結構的BFS方法顯示在java中執行BFS遍歷的圖的樹結構

public class BFS 
{ 

private Queue<Integer> queue; 

public BFS() 
{ 
    queue = new LinkedList<Integer>(); 
} 

public void bfs(int adjacency_matrix[][], int source) 
{ 
    int number_of_nodes = adjacency_matrix[source].length - 1; 

    int[] visited = new int[number_of_nodes + 1]; 
    int i, element; 

    visited[source] = 1; 
    queue.add(source); 

    while (!queue.isEmpty()) 
    { 
     element = queue.remove(); 
     i = element; 
     System.out.print(i + "\t"); 
     while (i <= number_of_nodes) 
     { 
      if (adjacency_matrix[element][i] == 1 && visited[i] == 0) 
      { 
       queue.add(i); 
       visited[i] = 1; 
      } 
      i++; 
     } 
    } 
} 

上面給出的是我的BFS方法,可有人幫我到讓我知道我有什麼確切的修改做出的代碼,使我得到所需的輸出

例如假設給定的鄰接矩陣是這樣的:

{0,1,0,0,0,1,0,0 
1,0,0,0,0,0,0,0 
0,0,0,0,0,0,1,0 
0,0,0,0,0,0,1,1 
0,0,0,0,0,1,0,0 
1,0,0,0,1,0,1,0 
0,0,1,0,0,1,0,1 
0,0,0,1,0,0,0,1} 

的樹狀結構這張圖會像這樣

 A 

/ \ 

    B  F 

    / \ 

    E  G 

     / | \ 

     C H  D 
+2

如果一個節點有10個孩子,會發生什麼情況? –

+0

這是我想弄明白的另一個問題 –

回答

0

它可以做你所描述的BFS,但它很麻煩。後序遍歷或有序遍歷可能更合適。檢查here,看看有什麼適合。