BFS代码的解释(Java)

时间:2016-09-02 15:36:39

标签: java algorithm graph breadth-first-search

这是我为BFS找到的代码,但我无法理解工作原理。  像 :     int number_of_nodes = adjacency_matrix[source].length - 1; 为什么要int[] visited = new int[number_of_nodes + 1];

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

1 个答案:

答案 0 :(得分:0)

BFS是广度优先搜索的简短形式。从源顶点开始,首先处理直接邻居,然后是那些直接邻居,依此类推。

 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表示)时,element应该从0开始。