带有迭代器的Java中的非递归DFS

时间:2014-10-22 16:47:45

标签: java algorithm iterator depth-first-search

我想使用ArrayList和邻接列表DFS图形(非递归)。 我有以下邻接列表

2 3 4
1 3 4
1 2 4
1 2 3

节点1 - > 2,3,4节点2 - > 1,3,4 ...... 我已经在这样的数组中实现了邻接列表: (L是线,l是线上的元素)

    ArrayList<List<Integer>>L=new ArrayList<List<Integer>>();
    ArrayList<Integer>l=new ArrayList<Integer>();

我已经在纸上写下了使用2个堆栈打印图形的DFS的以下算法。第一个节点可以是任何可能的节点。

//all viz[i] = 0;
stack.push(root);
while (!stack.isEmpty())
    {
        node = stack.pop();
        print node;
        viz[node]=1;
        for (each node.childnodes)
              {
              if(viz[i]==0) {stack.push(childnode)}
              }
    }

我不明白如何实现迭代器,所以我可以使用我的算法的arraylists。 我真的很感激任何帮助!

1 个答案:

答案 0 :(得分:0)

您不需要在此明确使用迭代器 - &#34; foreach&#34;各种for循环就足够了。

创建Stack<Integer>来存储当前节点的索引。您的for循环将如下所示:

Integer node = stack.pop();
// L.get(node) returns List<Integer>, letting you iterate
// over your adjacency list using "foreach" loop:
for (Integer child : L.get(node)) {
    if(!viz[child]) {
        stack.push(child);
    }
}

请注意,因为您已经访问过&#34;数组仅包含10,您应该使用boolean代替int作为其元素。