繁体   English   中英

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

[英]Non-recursive DFS in Java with Iterators

我想使用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。 我真的很感谢您的帮助!

你并不需要明确地在这里使用迭代器-一个“的foreach”品种的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);
    }
}

请注意,由于“已访问”数组仅包含1 s和0 s,因此应将boolean而不是int用作其元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM