queue.remove()和bfs需要帮助java

时间:2015-10-18 13:19:43

标签: java breadth-first-search

您好我需要帮助理解bfs算法的一部分,我将元素设置为queue.remove()以及如何使用值设置元素。如果有人能为我解释一下,那将会有很大帮助。感谢。

 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++;


        }}

    }
 }

1 个答案:

答案 0 :(得分:1)

queue是先进先出数据结构,它有助于使用bfs维护在图中搜索的节点的顺序 - 因为在bfs中,节点的直接邻居(让我们称之为节点A)是访问总是首先排队,因此它们将比不是节点A的直接邻居的节点更早出列(在你的情况下为queue.remove())。

在你的代码中,adjacency_matrix是一个用于保持邻居关系的2d方阵。 adjacency_matrix [i] [j] == 1表示节点j是节点i的邻居。

element = queue.remove(); - 提供您要访问的当前节点

queue.add(i); - 将元素的邻居添加到队列中,以便以后可以访问它。

您可以使用以下示例对其进行可视化:

enter image description here