【发布时间】:2020-05-12 01:06:09
【问题描述】:
任何人都可以向我解释这段代码的这两部分,它是 java 代码的一部分,作为 Dijkstra 最短路径最小生成树的数据结构的应用程序
第一个:-
PriorityQueue<Edge> pq = new PriorityQueue<>(allEdges.size(), Comparator.comparingInt(o -> o.weight));
第二个:-
makeSet(parent);
代码:-
public String MST(){
PriorityQueue<Edge> pq = new PriorityQueue<>(allEdges.size(), Comparator.comparingInt(o -> o.weight));
for (int i = 0; i <allEdges.size() ; i++) {
pq.add(allEdges.get(i));
}
int [] parent = new int[vertices];
makeSet(parent);
ArrayList<Edge> mst = new ArrayList<>();
int index = 0;
while(index<vertices-1){
Edge edge = pq.remove();
System.out.println("Source : "+edge.source+", Dest : "+edge.destination+", Weight : "+edge.weight);
int x_set = find(parent, edge.source);
int y_set = find(parent, edge.destination);
if(x_set==y_set){}
else {
mst.add(edge);
index++;
union(parent,x_set,y_set);
}
}
String str = "";
str+="Minimum Spanning Tree :-\n";
str+=printMST(mst);
return str;
}
public void makeSet(int [] parent){
for (int i = 0; i <vertices ; i++) {
parent[i] = i;
}
}
public int find(int [] parent, int vertex){
if(parent[vertex]!=vertex)
return find(parent, parent[vertex]);;
return vertex;
}
public void union(int [] parent, int x, int y){
int x_set_parent = find(parent, x);
int y_set_parent = find(parent, y);
parent[y_set_parent] = x_set_parent;
}
【问题讨论】:
-
欢迎来到 SO。你到底在努力理解什么? “请解释一下”是一个相当广泛的要求。您是否要求提供相关文档的链接?
标签: java data-structures minimum-spanning-tree