[英]Understanding a part of Dijkstra Shortest path in java code
任何人都可以向我解释这个代码,它是 java 代码的一部分,作为 Dijkstra 最短路径的数据结构的应用程序
PriorityQueue<Pair<Integer, Integer>> pq = new PriorityQueue<>(vertices, new Comparator<Pair<Integer, Integer>>() {
@Override
public int compare(Pair<Integer, Integer> p1, Pair<Integer, Integer> p2) {
int key1 = p1.getKey();
int key2 = p2.getKey();
return key1-key2;
}
});
注:完整代码为
public String Shortest_Path(int sourceVertex){
boolean[] SPT = new boolean[vertices];
int [] distance = new int[vertices];
for (int i = 0; i <vertices ; i++) {
distance[i] = Integer.MAX_VALUE;
}
PriorityQueue<Pair<Integer, Integer>> pq = new PriorityQueue<>(vertices, new Comparator<Pair<Integer, Integer>>() {
@Override
public int compare(Pair<Integer, Integer> p1, Pair<Integer, Integer> p2) {
int key1 = p1.getKey();
int key2 = p2.getKey();
return key1-key2;
}
});
distance[0] = 0;
Pair<Integer, Integer> p0 = new Pair<>(distance[0],0);
pq.add(p0);
while(!pq.isEmpty()){
Pair<Integer, Integer> extractedPair = pq.poll();
int extractedVertex = extractedPair.getValue();
if(SPT[extractedVertex] == false) {
SPT[extractedVertex] = true;
LinkedList<Edge> list = adjacencylist[extractedVertex];
for(int i = 0; i < list.size(); i++) {
Edge edge = list.get(i);
int destination = edge.destination;
if (SPT[destination] == false) {
int newKey = distance[extractedVertex] + edge.weight ;
int currentKey = distance[destination];
if(currentKey>newKey){
Pair<Integer, Integer> p = new Pair<>(newKey, destination);
pq.add(p);
distance[destination] = newKey;
}
}
}
}
}
这是 PriorityQueue 用于在您的代码中获得最小权重边缘,它是Pair
向 PQ 的构造函数声明的比较器用于比较两对进行堆化
PQ 并获得最小边缘,因此当您调用Poll()
方法时,将获取最小值
顶点之间的边
PriorityQueue<Pair<Integer, Integer>> pq = new PriorityQueue<>(vertices, new Comparator<Pair<Integer, Integer>>() {
@Override
public int compare(Pair<Integer, Integer> p1, Pair<Integer, Integer> p2) {
int key1 = p1.getKey();
int key2 = p2.getKey();
return key1-key2;
}
});
当您在代码中调用pq.poll()
时,优先级队列会返回最小权重边缘。 这是通过确保优先级队列的元素按权重的升序排列来完成的。
由于边表示为Pair
对象,因此未定义自然排序。 您询问的代码是指定 PriorityQueue 的排序标准的位置。 IE。 A Pair
有 2 个数据。 一个键和一个值。 在这段代码中,指定比较key
s 对PriorityQueue 进行排序。
创建一个具有指定初始容量的 PriorityQueue,根据指定的比较器对其元素进行排序
比较 function,它对某些对象集合施加了总排序。
和:
返回负 integer、零或正 integer,因为第一个参数小于、等于或大于第二个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.