我寫了一個應該支持DFS,BFS,A *,Dijkstra和貪婪算法的迷宮求解程序。無論如何,我選擇PriorityQueue作爲我的前沿數據結構,因爲我認爲優先級可以像隊列,堆棧或優先級隊列一樣依賴於比較器的實現。Java:從優先級隊列中產生奇怪的隊列順序
這是我如何實現我的比較器把優先級隊列到隊列:
/由於優先級隊列的「自然排序」具有在頭一個現有的比較收益的最小元素和-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),這是放在隊列的頭部。
我認爲我的比較者應該強制優先隊列將新來者放在後面。更奇怪的是,數據結構的性質從隊列變成了中間的棧。
非常感謝你們進取,對不起我的英語不好, 真誠, 肖恩
如果您想顛倒順序,您的比較器應該否定正常的返回。返回一個常量'1'不可能工作。 – EJP