您好我需要帮助理解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++;
}}
}
}
答案 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); - 将元素的邻居添加到队列中,以便以后可以访问它。
您可以使用以下示例对其进行可视化: