[英]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.