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)才放在队列的开头.

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

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

此致

肖恩

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值