上記のリンクには、BFS アルゴリズムを使用して迷路を解くために作成したプログラムが含まれています。迷路は 2D 配列として表され、最初は数値として渡されます (0 は訪問可能な空のブロックを表し、その他の数値は「壁」ブロックを表します)、定義したレコード タイプに変換されます。さまざまなデータの追跡:
type mazeBlock = {
walkable : bool;
isFinish : bool;
visited : bool;
prevCoordinate : int * int
}
出力は、最初から最後まで迷路を通る最短経路をたどる順序付けられたペア (座標/インデックス) のリストであり、その両方の座標がパラメーターとして渡されます。
分岐係数が低い小さな迷路では問題なく動作しますが、大きな迷路 (たとえば 16 x 16 以上)、特に壁のない (分岐係数が高い) 迷路でテストすると、多くの時間とメモリが必要になります。これがアルゴリズムに固有のものなのか、実装方法に関連しているのか疑問に思っています。そこにいる OCaml ハッカーは私に専門知識を提供してくれますか?
また、私は OCaml の経験がほとんどないため、コードをスタイル的に改善する方法についてアドバイスをいただければ幸いです。ありがとう!
編集:
これは、クリーンアップされ、編集されたプログラムのバージョンです。いくつかの文体の問題を修正しましたが、セマンティクスは変更していません。いつものように、2 番目のテストはまだ大量のリソースを消費しており、まったく終了していないように見えます。この問題についてまだ助けを求めています...
EDIT2:
解決しました。両方の回答者に感謝します。最終的なコードは次のとおりです。