現在、15 パズル ソルバー (C++) を作成していますが、15 パズルだけでなく、3x4 パズル、8x8 パズルなども解く必要があります... - > X x Y パズル。訪れた州に関する情報をどうにかして保持する必要があります。私の最初のアイデアは、たとえばツリーを作成することでした:
パズル:
状態 1
1 2
3 0
状態 2
1 3
0 2
私は私のツリーに保管します:
root->1->2->3->0
\_
\->3->0->2
これは、すべてのパズルの 5x3、6x6 などのパズルでも機能します。
このアイデアは機能しますが、多くのメモリを浪費し、ノードを追加するには時間がかかります:/ したがって、非常に非効率的です。
次のアイデアは、訪問した状態を stl の std::map< > に保持することでしたが、パズル状態からショートカットを作成するための適切なハッシュ関数を作成する方法がわかりません (パズル状態を保存する必要がないため、必要なのはstd::map への鍵、または訪問された状態に関する情報を保持するための他のアイデアについて、何か考えはありますか?