Сделайте Node класс, который имеет 3 поля (строка, столбец, расстояние) и реализует Comparable. Затем используйте Use PriorityQueue<Node>
:
import java.util.PriorityQueue;
class Main {
public static void main(String[] args) {
PriorityQueue<Node> pq = new PriorityQueue<>();
pq.add(new Node(2, 3, 12));
pq.add(new Node(0, 9, 1));
pq.add(new Node(4, 0, 8));
System.out.println(pq.poll().getDistance()); //prints 1
}
}
class Node implements Comparable<Node>{
private final int row, col, distance;
public Node(int row, int col, int value) {
this.row = row;
this.col = col;
distance = value;
}
int getDistance() {
return distance;
}
@Override
public int compareTo(Node other) {
return Integer.compare(distance, other.distance);
}
}
В качестве альтернативы установите Comperator
в очередь с приоритетами, чтобы Node
не пришлось реализовывать Comparable
:
import java.util.PriorityQueue;
class Main {
public static void main(String[] args) {
PriorityQueue<Node> pq = new PriorityQueue<>(Node::compare);
pq.add(new Node(2, 3, 12));
pq.add(new Node(0, 9, 1));
pq.add(new Node(4, 0, 8));
System.out.println(pq.poll().getDistance()); //prints 1
}
}
class Node{
private final int row, col, distance;
public Node(int row, int col, int value) {
this.row = row;
this.col = col;
distance = value;
}
int getDistance() {
return distance;
}
public static int compare(Node o1, Node o2) {
return Integer.compare(o1.getDistance(), o2.getDistance());
}
}
Вы можете также используйте лямбда-выражение для установки компаратора:
PriorityQueue<Node> pq = new PriorityQueue<>((o1,o2)->Integer.compare(o1.getDistance(), o2.getDistance()));
Все три опции действительны.