java的优先级队列_Java:优先级队列产生奇怪的队列顺序

我编写了一个迷宫求解程序,该程序应该支持DFS,BFS,A *,Dijkstra和贪婪算法.无论如何,我选择了PriorityQueue作为我的边界数据结构,因为我认为优先级的行为就像队列,堆栈或优先级队列一样,取决于比较器的实现.

这是我实现比较器以将优先级队列转换为队列的方式:

/由于优先级队列的“自然排序”元素最少,并且常规比较器在第一个小于第二个时返回-1,因此被黑的比较器始终返回1,因此当前(最后一个)平方为放在尾部(这应该递归地工作)/

public int compare(Square square1, Square square2)

{

return 1;

}

但是,在进行BFS之后,迷宫的解决方案并不是最佳的.

迷宫从坐标(35,1)的右上角开始,我的程序检查左,然后上,然后下,然后是右邻居.

这是我做的println:

选出(35,1)

添加(34,1)

添加(35,2)

选出(34,1)

添加(33,1)

添加(34,2)

选出(35,2)

添加(35,3)

选出(33,1)

添加(32,1)

添加(33,2)

轮询(34,2)

加(34,3)

轮询(32,1)

……

BFS(35,3)中的通知应在(32,1)之前被轮询,因为前者在后者之前被添加到队列中.真正让我感到困惑的是,数据结构的行为就像一个队列-所有新成员都是从后面添加的-直到我添加(32,1)才放在队列的开头.

我认为我的比较器应该强制优先级队列将新来者排在后面.对我来说甚至更奇怪的是,数据结构将其性质从队列更改为中间的堆栈.

非常感谢你们,并为我的英语不好对不起,

此致

肖恩

你可能感兴趣的:(java的优先级队列)