当前位置: 首页 > 知识库问答 >
问题:

java.util.PriorityQueue的元素不会在轮询时向上移动()

闽涵蓄
2023-03-14

我在图上实现了一个BFS,其中节点由状态类的对象标记(我实现了一个隐式等于方法进行比较)。

我已经实现了我的队列使用PriorityQueue与一个返回1的比较器,因为我想扩展程序来处理DFS,Astar等,我可以做的只是改变比较器内的逻辑

以下是相关代码:

//bfscompariator。JAVA

import java.util.Comparator;

public class BFSComparator implements Comparator<State>{
    @Override public int compare(State x, State y) {
       return 1;
    }
}

//解算器。JAVA

Comparator comparator = new BFSComparator();
PriorityQueue<State> frontierList = new PriorityQueue<State>(500,comparator); //List of nodes to be expanded
frontierList.add(seed state0);
while (!frontierList.isEmpty()){
        curState = frontierList.poll();
        //handle, expand and add child states to frontierList

在遍历列表并打印当前元素时,我发现有些元素没有上移(例如,poll上的{a,b,c,d,e}变成poll()上的{b,e,c,d},而不是{b,c,d,e}),因此它不执行FIFO。

for(State x:frontierList) {
             //print x
}

1) 我的比较仪有问题吗?

2) 有没有更好的方法来实现这一点?i、 例如,一个比优先级队列更好的容器,我可以在更改排序背后的逻辑时添加它,而不是使用具有不同调用名(如push和pop)的队列和堆栈?这将有助于我以后根据启发法对它们进行排序。或者我应该使用链表并执行基于插入排序的方法吗?

编辑:我想说得更清楚一点。我正在尝试实现一个集合,我可以通过一个公共的add(State)或State x=remove()来实现它,而不考虑DFS或BFS(FIFO或LIFO)或其他基于优先级的算法,如a-Star和Beam搜索。

我可能会扩展集合并实现add和其他方法。

共有1个答案

栾瑞
2023-03-14
public int compare(State x, State y)

此方法返回正值表示x

我觉得你应该用队列来申报边境名单

当你需要DFS时,使用LinkedList

当您需要BFS时,请使用PriorityQueue

 类似资料:
  • 问题内容: 我有一个( 父 )包含另一个( 子 )。Parent是第一个没有特定CSS样式的元素。当我设定 最终结果是我的孩子的顶部仍然与父母对齐。我的父母没有将孩子向下移动10px,而是将其向下移动10px。 我的设定为。 我在这里想念什么? 编辑1 我的父母需要具有严格定义的尺寸,因为它的背景必须从上到下显示(像素完美)。因此,在其上设置垂直边距是 不可行的 。 编辑2 此行为在FF,IE和C

  • 我有一个xml。我想要元素

  • 以下是您将看到的一些方法的快速描述: > :返回船的边界(一个矩形) :返回表示船边界中心的Vector2d。 :一个,它表示船的速度(每帧添加到位置) :一个新的,当给定一个角度(以弧度为单位)时,将其标准化 :不是线性插值!如果你想看代码,这里是(在类中): 当玩家没有按键时,飞船应该减速。以下是我为此所做的: 然而,现在我意识到我希望它在向目标移动时漂移。我试过这个: 这当然不会真的达到零速

  • 我有以下HTML结构,并将dragenter和dragleave事件附加到

  • 问题内容: 总览 我具有以下HTML结构,并且将和事件附加到了元素上。 问题 当我将文件拖到时,事件将按预期触发。但是,当我将鼠标移到子元素(例如)上时,会为该元素触发该事件,然后为该元素触发该事件。 如果我再次将鼠标悬停在该元素上,则再次触发该事件,这很酷,但是随后为刚刚剩下的子元素触发了该事件,因此执行了该指令,这并不酷。 此行为有问题的原因有两个: 我只附加&,所以我不明白为什么子元素也要附

  • 我在一个SVG中有一个text元素,我已将jQuery ui应用到该元素中。每当我试图拖动它时,顶部和左侧的CSS属性就会如您所期望的那样发生变化,然而,元素本身并没有移动--它只是停留在原地。 这违背了我所理解的关于定位的一切。它似乎完全忽视了“上”和“左”的规则。 然而,情节变得更加浓重。 我还在同一svg中对图像应用了ui-draggable,它在这方面工作得很好。当我拖动它的时候,它会像预