Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java优先级队列_Java_Sorting_Iteration_Priority Queue - Fatal编程技术网

Java优先级队列

Java优先级队列,java,sorting,iteration,priority-queue,Java,Sorting,Iteration,Priority Queue,如何使用java内置的优先级队列读取和排序图形的顶点,最终在每次迭代中删除最小边?首先,为优先级队列创建一个比较器: class MinHeapComparator implements Comparator<Integer> { @Override public int compare(Integer one, Integer two) { return mDistances[one] - mDistances[two];//... } }

如何使用java内置的优先级队列读取和排序图形的顶点,最终在每次迭代中删除最小边?

首先,为优先级队列创建一个比较器:

  class MinHeapComparator implements Comparator<Integer> {
    @Override
    public int compare(Integer one, Integer two) {
    return mDistances[one] - mDistances[two];//...
    }
  }  
这是我写的最短路径算法。mDistances是从源到顶点的距离。您可以修改比较器以比较您喜欢的方式

来自Comparator的文档:比较其两个参数的顺序。返回负整数、零或正整数,因为第一个参数小于、等于或大于第二个参数

请在此完成文档:

其次,将项目添加到优先级队列。我通常使用包含顶点对象的数组构建一个图,每个对象包含其相邻顶点的列表。所以在我的例子中,我只是向优先级队列添加索引来表示顶点。比较器可以包含对顶点执行任何操作的逻辑。PriorityQueue.add添加项目

第三,用比较器实例化优先级队列:

    PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>(numberItems, new MinHeapComparator());

第四,调用PriorityQueue.poll以提取堆上的顶部项。比较器用于确定堆顶部的项目

通常的做法是展示你已经尝试过的东西,并就你不理解的东西提出一个具体的问题。试着发布一些代码来展示你到目前为止所做的事情。否则你会被否决,这个问题可能会因为不是一个真正的问题而结束。谢谢。您还可以将项目添加到优先级队列中,然后运行for循环来比较它们并删除最小边吗?如果您将比较器设置为比较边权重,则在循环中调用poll方法将在每次迭代中删除最小边。你在实现什么算法?图中的最小生成树?是的,我必须最终找到mst,而且我必须使用不相交的集合数据结构