作为练习,我试图使用最小优先级队列在Java中实现Dijkstra算法。队列必须根据条目与源的距离确定条目的优先级。
public static <E> void dijkstraPriority(Graph<E> g, Vertex<E> source, Vertex<E> dest) {
Map<Vertex<E>,Double> dist = new HashMap<Vertex<E>,Double>();
Map<Vertex<E>,Vertex<E>> prev = new HashMap<Vertex<E>,Vertex<E>>();
Queue<Vertex<E>> q = new PriorityQueue<Vertex<E>>(g.getVertices().size(),
new Comparator<Vertex<E>>(){
@Override
public int compare(Vertex<E> v, Vertex<E> u) {
return dist.get(v).compareTo(dist.get(u)); //error happens here
}
}
);
//The rest of the implementation
}
我在第8行收到的错误是:“不能引用内部类中的非final变量”。
由于我必须在算法期间更新距离,dist
不能是final
,但这反过来阻止我当前实施比较器。我在这里看过任何类似的问题,但似乎没有一个适用于我的情况。
有什么方法可以解决这个问题吗?