我正在尝试从 CLRS 实现 Dijsktra 的算法 - 算法简介一书,但是,我在使用Comparator
接口实现优先级队列时遇到了麻烦。如您所见,这是我的 Vertex 类;
public class Vertex {
public boolean explored;
public int vertexID;
public LinkedList<Vertex> adjacencyList;
public LinkedList<Edge> edgeSet;
public int shortestDistance;
public Vertex predecessor;
public Vertex(int vertexID){
this.vertexID = vertexID;
this.explored = false;
this.adjacencyList = new LinkedList<>();
this.edgeSet = new LinkedList<>();
this.shortestDistance = Integer.MAX_VALUE;
this.predecessor = null;
}
}
所以最初shortestDistance
属性被声明为Integer.MAX_VALUE
. 此外,您可以看到 Comparator 实现的类用于优先级队列。
public class WeightComparator implements Comparator<Vertex> {
@Override
public int compare(Vertex o1, Vertex o2) {
return Math.min(o1.shortestDistance, o2.shortestDistance);
}
}
由于我的一些测试,我确信整个实现没有任何逻辑错误,但是,在某些测试中它失败了。我使用此语句创建对我的队列的引用
PriorityQueue<Vertex> queue = new PriorityQueue<>(N, weightComparator);
其中 N 是队列的大小。因此,如果我对它的工作方式有误,请纠正我。当您poll
从中获取项目时,它将删除优先级最低的项目?希望很清楚地了解我的问题,如果有人能对此提供帮助,我将不胜感激。所以还是谢谢