DFS、BFS、A*、ダイクストラ、貪欲なアルゴリズムをサポートするはずの迷路を解くプログラムを書きました。とにかく、優先度はキュー、スタック、または優先度キューのように動作する可能性があると考えたので、フロンティア データ構造に PriorityQueue を選択しました。これは、コンパレータの実装に依存します。
これは、プライオリティ キューをキューに変換するコンパレータを実装する方法です。
/プライオリティ キューの「自然な順序付け」では先頭に最小の要素があり、従来のコンパレータは最初の要素が 2 番目の要素よりも小さい場合に -1 を返すため、ハッキングされたコンパレータは常に 1 を返すため、現在の (最後の) 2 乗は次のようになります。末尾に配置 (これは再帰的に機能するはずです) /
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) を追加するまで、データ構造がキューのように動作したことです。すべての新しいメンバーは後ろから追加されました。
私は、コンパレーターが優先キューを強制して新規参入者を後ろに置くべきだと考えました。私にとってさらに奇妙なのは、データ構造がその性質をキューから真ん中のスタックに変えたことです。
ありがとうございます