这是我为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++;
}
}
}
答案 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开始。