我想使用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。 我真的很感激任何帮助!
答案 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;数组仅包含1
和0
,您应该使用boolean
代替int
作为其元素。