2015-10-18 2 views
-3

Здравствуйте, Мне нужна помощь в понимании части алгоритма bfs, где я устанавливаю элемент queue.remove() и как элемент устанавливается со значением. Если кто-то может объяснить мне, что это очень поможет. Благодарю.queue.remove() и bfs нужна помощь java

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.println(i+"\t"); 
     while(i<=number_of_nodes) 
     { 
      if(adjacency_matrix[element][i] == 1 && visited[i] == 0) 
      { 
       queue.add(i); 
       visited[i] = 1; 

      } 
      i++; 


     }} 

    } 
} 
+0

Не могли бы вы дать фон. Какая польза, почему вы это делаете, и где именно проблема в этой ситуации? SO - ответить на проблемы с кодированием, здесь у вас есть алгоритм, который потенциально может работать, я не пытался его запустить, потому что я действительно не понимаю необходимость, так как вы не дали никаких ... –

+0

жаль, что не был яснее. Этот алгоритм работает. Он читается в матрице смежности и всем. Я не понимаю, как работает элемент = queue.remove() в коде, например, как он присваивает ему значение. – codegeek123

+0

Из Javadoc: 'Извлекает и удаляет головку этой очереди. Этот метод отличается от опроса только тем, что он генерирует исключение, если эта очередь пуста. –

ответ

1

очередь это первый в первой Из структуры данных, это помогает поддерживать последовательность узлов разыскивается в графе с использованием BFS - так как в BFS, прямые соседи узла (назовем его узел A) всегда находятся в очереди, поэтому они будут отложены (queue.remove() в вашем случае) раньше узлов, которые не являются прямыми соседями узла A.

В вашем коде adjacency_matrix является 2d квадратный массив, который вы использовали для поддержания соседних отношений. adjacency_matrix [i] [j] == 1 означает, что узел j является соседним узлом i.

element = queue.remove(); - дает ваш текущий узел для посещения

queue.add (i); - добавляет сосед элемента в очередь, чтобы его можно было посетить позже.

Вы можете визуализировать его, используя следующий пример:

enter image description here

+0

, так что в основном элемент читает в голове очереди, которая удаляется. поэтому элемент и i являются одинаковыми до тех пор, пока я не войду в цикл while и не увеличится непрерывно, что обновит посещенный и т. д., так что если глава очереди будет источником в этом случае, тогда источник будет = элемент и i для стартеров, тогда я буду увеличивать а затем перейти к условному и запустить через это? это верно? – codegeek123

+0

Честно говоря, я немного сожалею о том, чтобы показать график и таблицы. Почему бы вам не добавить столбец в таблице итераций, я дал вам проследить, как я обновляюсь? Я предлагаю вам прочитать bfs wikipedea, чтобы понять концепцию bfs. https://en.wikipedia.org/wiki/Breadth-first_search – Bon

Смежные вопросы