ちょっとご無沙汰してます。deepgreenです。 13パズルの最長手数解を求めた結果を以下に報告します。 【問題の定義】  以下の局面を最終局面とする13パズルの最長手数を求める問題です。       1 2 3 +     4 5 6 7   +:ダミー(移動不可)     8 9 a b   *:スペース     + c d *   この13パズルの局面の数は、14!/2=43,589,145,600通りあり、1局面を1ビットで表現  したとしてもメモリ不足で幅優先探索では解けません。これを、2ステップサーチ+斜軸対称性を利用して局面  の数を削減すると、3*13!/2=9,340,531,200通りとなるが、まだとどきません。  (高橋謙一郎さんの分析:2004.02.06の書き込み)  今のところ、これ以上の改善は思いつかないので、別のアプローチを採用した。といっても新しいものではなく  以前に15パズルの最長手数へのアプローチ(これは挫折した)を簡略化したもの+上記の2ステップサーチ+  斜軸変換を適用しただけです。 【結果】  ・最長手数     74手 (下記の1通り。この解は斜軸変換しても変わらない)                 * b 7 +            d a 6 3            c 9 5 2            + 8 4 1  ・探索時間    約19時間  ・使用PC    CPU:Pentium4 1.4GHz           メモリ:512MB (約400MBのハッシュテーブルを使用)   なお、高橋謙一郎さんの15パズルのソルバーを改造して使用させていただきました。   このソルバーなくして、この問題の解決はありえません。ありがとうございます。  【解法】 (1)基本的な考え   すべての生成局面を記憶するだけのメモリを容易できないので、最長手数の局面に近いものを絞り込んで、個々   の局面を解いて、最長手数となる局面を求める。そのため、以下の様なSubGoalを設ける。     初期局面   SubGoal Goal (X) (s1) (s2) (G) +−−−−+     +−−−−+  +−−−−+ +−−−−+    |    | H1   |1 2 3 +|  |1 2 3 +| H2   |1 2 3 +|    |    | ------> |4 5 6 7| or |4 5 6 7| ------> |4 5 6 7|    |    |     |8 9 ? *|  |8 9 ? ?|     |8 9 a b|     |    |     |+ c ? ?|  |+ c * ?|    |+ c d *|    +−−−−+     +−−−−+  +−−−−+     +−−−−+               注:?にはa,b,dが入る      @SubGoalは、Goalの部分解となっているように選ぶ。       初期局面(X)を解く過程で必ずSubGoalの(s1) (s2)のいずれかを通る。      ASubGoal−>Goalでは?の部分の数字以外は移動しない。      BSubGoalからGoalはなるべく近くに選ぶ。      Cただし、SubGoalから最も遠い局面を幅優先探索で解けること。(あまりGoalに近すぎないこと)       このSubGoalの場合は、2ステップサーチ+斜軸対象性を使用すれば、3*13P10=3,113,510,400局面       となり、1局面を1ビットとすると約400MBのハッシュ用メモリがあればよい。    一般に、    (X)−>(G)への最短手数を      H   (X)−>SubGoal(S)への最短手数を  H1   (S)−>(G)への最短手数を      H2    とすると、 H1 < H <= H1+H2 となる。即ち、(H1+H2)は(X)の上限値の1つと    なっている。さらに、H1は、(X)の下限値である。(SubGoalとして部分解を選んでいるので)    一方、H2は、?の数字の並びに依存してきまるが、いずれにせよ1〜5手の範囲である。つまり、 H1 < H <= (H1+5) となる。このことは、SubGoalを最終局面とする最長手数をnとすると(nはH1の最大値)    もとの問題の最長手数は、(n+1)手〜(n+5)手の範囲に存在することを意味する。     従って、SubGoalを最終局面とする手数n〜n−5の範囲の局面に絞って、もとの問題の手数を調べればよい。 (2)具体的な解法   @ 2ステップサーチ+斜軸対象性を使用した探索により、SubGoalを最終局面とする奇数局面の最長手数o     を求める。その結果,o=68が得られる。      a)手数o  の局面の数は、40         b)手数o−2の局面の数は、2861      c)手数o−4の局面の数は、71168 A a),b),c)の順に問題の生成(?をa,b,dに置換)と解法を行い、もとの問題が奇数局面の範囲     で最長手数となる局面を探索する。     ex.68手の局面の例 (p1) (p2) (p3)         ? * 7 + b * 7 + a * 7 + d * 7 +         ? ? 6 3 -----> d a 6 3 b d 6 3 a b 6 3 c 9 5 2 c 9 5 2 c 9 5 2 c 9 5 2 + 8 4 1 + 8 4 1 + 8 4 1 + 8 4 1     今回の場合、幸運なことに、a)を解いた段階で73手(68+5)の解が得られた為、b),c)の処理は     不要となった。   B 上記で求めたすべての73手の局面(実は斜軸対称性を除くと1つ)について、74手の局面が存在するか     どうかの検査を行う。(この手順は、2ステップサーチの最終処理と同じなので省略)     この結果、以下の1通りの局面のみが74手であることが判明した。 73手の局面 74手の局面    b * 7 + * b 7 +     d a 6 3   ----> d a 6 3   c 9 5 2 c 9 5 2   + 8 4 1 + 8 4 1 (3)補足    13パズルのソルバーが必要となったが、高橋謙一郎さんの15パズルソルバーをちょっと改造して使用した。 以上