Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 广度优先搜索(BFS)_Java_Algorithm_Traversal_Breadth First Search - Fatal编程技术网

Java 广度优先搜索(BFS)

Java 广度优先搜索(BFS),java,algorithm,traversal,breadth-first-search,Java,Algorithm,Traversal,Breadth First Search,我正在研究BFS算法,我刚才有一个关于如何将相邻节点插入队列的问题 例如,假设我们正在处理一个无向图,我们希望执行BFS以输出图的内容,那么我们如何知道在从队列中拉出初始节点后,相邻节点插入队列的顺序是什么?此外,是否有任何方法可以修改相邻节点插入队列的方式 任何帮助都将不胜感激,谢谢 兄弟姐妹(邻居)的插入顺序完全由插入它们的代码决定-从理论角度来看没有要求。BFS的要求是,在深度k+1处的任何节点之前,先遍历深度k处的所有节点 例如,给定队列q和根节点root: q.enqueue(root

我正在研究BFS算法,我刚才有一个关于如何将相邻节点插入队列的问题

例如,假设我们正在处理一个无向图,我们希望执行BFS以输出图的内容,那么我们如何知道在从队列中拉出初始节点后,相邻节点插入队列的顺序是什么?此外,是否有任何方法可以修改相邻节点插入队列的方式


任何帮助都将不胜感激,谢谢

兄弟姐妹(邻居)的插入顺序完全由插入它们的代码决定-从理论角度来看没有要求。BFS的要求是,在深度
k+1
处的任何节点之前,先遍历深度
k
处的所有节点

例如,给定队列
q
和根节点
root

q.enqueue(root);

while(!q.isEmpty()) {
     Node n = q.dequeue();

     <process n>

     // add children to queue
     for (Node child : n.getChildren()) {
          q.enqueue(child);
     }
}
代码可以设置为按数字顺序遍历子级。它将处理1,将其子级(1.1、1.2、1.3)添加到队列,处理1.1,将其子级(无)添加到队列,处理1.2,将其子级(1.2.1、1.2.2)添加到队列,处理1.3,将其子级(1.3.1)添加到队列,然后移动到第三级

如果要修改顺序,可以(A)更改将节点添加到队列中的代码逻辑,指定选择下一个要推送的子节点的特定方式,而不是盲目迭代,(B)更改/覆盖Enqque块调用的迭代函数
getChildren()
,或(C)如果您知道迭代的方法,但无法更改代码,请强制树具有将由迭代函数以您想要的方式遍历的设置,例如通过重命名节点或以特定方式在结构中链接节点。方案(B)可能是首选方案


既然你说这个图是“无向的”,听起来好像你无法控制这个图本身的顺序,所以选项(C)无论如何都不起作用。因此,如果要控制子节点的顺序,则需要让迭代代码以某种方式对节点进行排序,以便获得一致的结果。

答案部分取决于节点是邻居这一事实的表示方式。根据BFS算法的实现,邻域的顺序可能重要,也可能不重要。在许多情况下,顺序没有区别。为了添加实际的透视图,图形很可能使用标准数据结构表示,如邻接列表(在这种情况下,邻居将以其作为当前节点的邻居添加的任何顺序进行迭代)、邻接矩阵(在这种情况下,邻居可能会以升序数字顺序进行迭代)或边列表(在这种情况下,邻居将以其边添加的任何顺序进行迭代)。如果对邻接列表或边列表数据结构使用集合而不是列表,则可能未指定顺序。
1
1.1 1.2          1.3
    1.2.1 1.2.2  1.3.1