【发布时间】:2011-10-13 19:34:30
【问题描述】:
我已经很久没有接触 Java 了,所以这似乎是一个奇怪的问题。目前有我在 StackOverflow 上找到的广度优先搜索代码,我已对其进行了修改,但我将在此处发布原始代码。
public List<Node> getDirections(Node start, Node finish){
List<Node> directions = new LinkedList<Node>();
Queue<Node> q = new LinkedList<Node>();
Node current = start;
q.add(current);
while(!q.isEmpty()){
current = q.remove();
directions.add(current);
if (current.equals(finish)){
break;
}else{
for(Node node : current.getOutNodes()){
if(!q.contains(node)){
q.add(node);
}
}
}
}
if (!current.equals(finish)){
System.out.println("can't reach destination");
}
return directions;
}
我知道那里有其他深度优先搜索算法,但我也被告知可以轻松地将广度优先搜索转换为深度优先搜索,如果对这段代码而不是 2 进行处理,我会更好地理解它完全不同的代码。
如何将其更改为深度优先搜索?
【问题讨论】:
-
您是否尝试过自己将其转换为 DFS?如果是这样,什么不起作用?
-
只是一个提示:我记得不久前,如果你以这种方式编写算法,你可以通过在 LIFO 和 FIFO 数据结构之间切换来在 DFS 和 BFS 之间切换,例如 Stack或队列。
-
-
@user799211:要从左侧向下移动,您可以使用
List outNodes = new ArrayList(current.getOutNodes()); outNodes.removeAll(q); q.addAll(0, outNodes);
标签: java algorithm search depth