DAG(Direct Acyclic Graph)のBFSフォレストを生成したい。つまり、Treeクラスは、バイナリツリーではなく、一般的なツリーである必要があります(つまり、フォレストを生成するときに、ノードが持つ子の数を事前に知ることはできません)。ほとんどのコードは以下に記述されて示されていますが、私は一生の間、私を逃れる一行が欠けています!
public Tree BFS(V start)
{
reset();
LinkedList<GraphMatrixVertex<V>> list = new LinkedList<GraphMatrixVertex<V>>();
GraphMatrixVertex<V> vert = dict.get(start);
Tree root = new Tree(vert);
list.add(vert);
do
{
vert = list.getFirst();
Iterator<V> ni = neighbors(start);
while(ni.hasNext())
{
V v = ni.next();
GraphMatrixVertex<V> vtx = dict.get(v);
if(!vtx.isVisited())
{
list.add(vtx);
vtx.visit();
root.addChild(new Tree(vtx));
}
}
//code goes here
}
while(!list.isEmpty());
return root;
}
My Treeクラスには、値パラメーター、親参照、および子のリストが格納されます。私の問題は、次のツリーノードを参照することです。未訪問のすべてのネイバーを現在のノードの子として追加したら、次のノードに移動するにはどうすればよいですか?
編集:
それで、それはこのように見えるでしょうか?
public void bfs(Tree parent)
{
Iterator<V> ni = neighbors((V) parent.value());
if(ni.hasNext())
{
while(ni.hasNext())
{
V next = ni.next();
GraphMatrixVertex<V> vert = dict.get(next);
if(!vert.isVisited())
parent.addChild(new Tree(next));
}
}
}
再帰呼び出しはどこに行きますか?