我编写了一个迷宫求解程序,该程序应该支持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)才放在队列的开头.
我认为我的比较器应该强制优先级队列将新来者排在后面.对我来说甚至更奇怪的是,数据结构将其性质从队列更改为中间的堆栈.
非常感谢你们,并为我的英语不好对不起,
此致
肖恩