【问题标题】:Understanding a part of minimum spanning tree in java code [closed]了解java代码中最小生成树的一部分[关闭]
【发布时间】: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


【解决方案1】:

对于First Part,它是Priority Queue或Heap的一个属性,它可以排序 根据我们的需要,最大值或最小值将始终位于顶部。

现在,这里会有一个名为 Edge 的自定义类。它不在您的代码中,但它会在那里。第一部分是对优先级队列进行排序,使得权重最小的边应该排在最前面。这就是我们使用自定义比较器的原因。

PriorityQueue<Edge> pq = new PriorityQueue<>(allEdges.size(), Comparator.comparingInt(o -> o.weight));

当我们找到最小生成树时,我们需要具有最小权重的边,所以这样做了。我有一个类似的Java最小生成树代码,如果你需要,请告诉我。

【讨论】:

  • 如果你能把你拥有的其他代码发给我,它可能对我很有用
  • @Omarobaisi。观看 William Fiset 在 Youtube 上的这段视频。 Link
【解决方案2】:

这是用于获取最小权重边的 PriorityQueue

向PQ的构造函数声明的比较器,用于比较两条边

权重来堆积PQ并获得最小边,所以当你调用Poll()方法时会

选取顶点之间的最小边

【讨论】:

    猜你喜欢
    • 2011-03-24
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 2012-10-30
    • 2018-10-14
    • 1970-01-01
    • 2012-11-27
    相关资源
    最近更新 更多