【发布时间】:2013-04-15 04:46:54
【问题描述】:
我正在实现用户使用 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);
}
}
}
}
但这并不是先做深度,它首先打印出连接到起始顶点的顶点,而不是先遍历第一个连接的顶点,然后遍历它的连接顶点。
【问题讨论】:
-
这个实现似乎是广度优先搜索。深度优先搜索最简单的实现是使用递归:en.wikipedia.org/wiki/Depth-first_search
-
不,这甚至不是广度优先。它没有正确打印 BFS 遍历。