我正在使用 jung 实现用户绘制的图的深度优先遍历。
我现在有以下代码:
public <V,E> void dftdraw(Graph<V,E> g) {
V start = null;
for (V v:g.getVertices()){
if(v.toString().equals("0"))
start = v;
}
Set visited = new HashSet();
LinkedList stack = new LinkedList();
stack.add(start);
System.out.println(start.toString());
// traverse through graph in depth-first order
while (!stack.isEmpty())
{
V v = (V)stack.removeFirst();
visited.add(v);
Set neighbors = (Set) g.getNeighbors(v);
for (Iterator n_it = neighbors.iterator(); n_it.hasNext(); )
{
V w = (V)n_it.next();
if (!visited.contains(w)){
System.out.println(w.toString());
stack.addFirst(w);
}
}
}
}
但这并不是深度优先,它首先打印出连接到起始顶点的顶点,而不是像遍历第一个连接的顶点,然后遍历它的连接的顶点。
最佳答案
那是因为您打印顶点的速度太快了。如果您希望按访问顺序打印它们,则需要在访问时打印(在从堆栈中删除顶点之后)。否则该算法看起来没问题。
关于java - 使用 jung 的连通图的深度优先遍历不显示右遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15995962/