自从我与Java打交道以来,这已经很长时间了,所以这可能看起来像一个奇怪的问题。目前,我在StackOverflow上找到了这个广度优先搜索代码,我在最后修改了它,但是我会在这里发布原始代码。将广度优先搜索转换为深度优先使用Java搜索
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?如果是这样,什么不起作用? – MAK
只是一个提示:我记得从前一段时间,如果你以这种方式编写算法,只需在LIFO和FIFO数据结构(如堆栈或队列)之间切换,就可以在DFS和BFS之间切换。 –
我得到它沿着左侧旅行,但那是一些凌乱的hacky代码,(通过编辑for循环中的代码)它有很多nullpointerexceptions和headbanging过去的年龄 –