【发布时间】:2010-11-15 22:11:51
【问题描述】:
我正在尝试构建一种方法,该方法在未加权图中返回从一个节点到另一个节点的最短路径。我考虑过使用 Dijkstra 的,但这似乎有点矫枉过正,因为我只想要一对。相反,我实现了广度优先搜索,但问题是我的返回列表包含一些我不想要的节点 - 如何修改我的代码以实现我的目标?
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;
}
【问题讨论】:
-
你为什么不想要其中的一些节点?
-
并不是所有的都属于一条最短路径路由
-
类Node是否正确覆盖equals和hashcode?span>
-
当我在 2D 网格上做这样的事情时,我发现 A*(A 星)算法更容易理解。
-
我认为使用 Dijkstra 的算法是最简单的方法。您在节点上进行一次传递以标记它们的成本,并在另一次传递以选择任何最短路径。看起来您正在尝试一次性完成所有操作,我认为使用此算法不容易完成。
标签: java algorithm graph shortest-path breadth-first-search