2016-09-02 4 views
-4

Это код, который я нашел для BFS, но у меня проблемы с пониманием работы. Вещи вроде: int number_of_nodes = adjacency_matrix[source].length - 1; и зачем брать int[] visited = new int[number_of_nodes + 1];?описание кода BFS (Java)

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.poll(); 
     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++; 
     } 
    } 
} 
+0

Ваш вопрос кажется недостаточным, чтобы понять, что такое 'adjacency_matrix', и поскольку этот код не объясняет это, почему бы вам не вернуться к тому, где вы его нашли, и посмотреть еще? – Andreas

+0

Я знаю, какая матрица смежности. Я просто не понимаю, почему количество узлов подсчитывается таким образом. –

+1

Вы спрашиваете «почему« - 1 »? Если это так, это потому, что тот, кто написал код, решил сделать это именно так. – Andreas

ответ

0

BFS - это короткая форма для Breadth-First-Search. Начиная с исходной вершины сначала обрабатываются прямые соседи, за которыми следуют прямые соседи тех и так далее.

while (!queue.isEmpty()) 
{ 
    element = queue.poll(); 
    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++; 
    } 
} 

4-я строка не нужна, как вы можете просто напечатать element непосредственно. i должен начинаться с 0, когда вы пытаетесь выполнить итерацию через возможных соседей текущей вершины (представленной element).