Я пытаюсь реализовать приоритетную очередь моего типа класса BBNode, но, похоже, она не просеивает новые узлы так, как я ожидаю. Вместо того, чтобы наименьший быть во главе очереди (как это работает сейчас), я хочу, чтобы самый большой был там, но я не могу понять, как заставить это работать. Вот мой класс BNNode.
public class BBNode implements Comparable<BBNode>{
public int level; //level on the tree
public int value; //value up to that node
public int weight; //weight up to that node
public double bound; //bound of that node
//...constructors
public int compareTo(BBNode node){
if(this.bound > node.bound) return -1;
if(this.bound < node.bound) return 1;
return 0;
}
}
И здесь я использую PQ.
PriorityQueue<BBNode> pq = new PriorityQueue<BBNode>();
//..other variables
while(pq.peek() != null){
v = pq.poll();
//System.out.println(v.weight + " " + v.value + " " + v.bound);
if(v.bound >= bestVal && v.level < sortedItems.length-1){
//left branch: take the next item
u.level = v.level+1;
u.weight = v.weight + sortedItems[u.level].weight;
u.value = v.value + sortedItems[u.level].value;
u.bound = bound(u);
//System.out.println(u.bound);
if(u.bound > bestVal){
pq.add(u);
System.out.println("adding " + u.bound);
System.out.println("top of pq is " + pq.peek().bound);
}
if(u.weight <= maxWt && u.value > bestVal){
bestVal = u.value;
bestWt = u.weight;
//System.out.println(bestVal + " " + bestWt);
takeList[arrIdx++] = sortedItems[u.level].item+1;
}
//right branch: don't take the next item
u.weight = v.weight;
u.value = v.value;
u.bound = bound(u);
if(u.bound > bestVal){
pq.add(u);
System.out.println("adding " + u.bound);
System.out.println("top of pq is " + pq.peek().bound);
}
}
}
Извините, форматирование в конце отстой. Последняя скобка соответствует циклу while.
Я также пытался переключаться между -1 и 1 в методе сравнения, и я также пытался реализовать компаратор, но с теми же результатами.
Любая помощь приветствуется :)