我将尝试使用广度优先搜索算法从遍历一个无向连通图中自然生成(跨越)一棵树,但我在修改算法以生成树时遇到了困难。我使用的是Java语言。
以下是我的BFS算法:
我认为我的问题在于我不能直接将图中的一些
以下是我的BFS算法:
public void traverse(Node node){
Queue queue= new Queue();
node.visited= true;
//Maybe do something here?
queue.enqueue(node);
while (!queue.isEmpty()){
Node r= queue.dequeue();
for (int i= 0; i < r.childen.size(); i++){
Node s= (Node)r.childen.get(i);
if (s.visited == false){
//And do something here?
s.visited= true;
queue.enqueue(s);
}
}
}
}
我的图数据结构如下(请注意它是无向且连通的):
public class Graph {
Node mainNode; ...
树数据结构也很简单:
public class Tree {
Node root; ...
我的节点定义如下:
public class Node<T> {
T data;
boolean visited= false;
ArrayList<Node> childen= new ArrayList<Node>();
...
我认为我的问题在于我不能直接将图中的一些
Node node
添加到我的树中(因为这个node
已经有了所有的子节点)。相反,我必须创建一个new Node(node.data)
,以便在树中添加的节点不会指向同一节点在图中指向的所有相邻节点。所以我的问题是:在使用广度优先搜索遍历所述图时,如何构建出一棵(生成)树?