最終更新日: 2012年3月26日
3x3(8パズル)のようなスライドパズルでは、初期配置でランダムに数字をセットしていくと、ゴールできない配置になる場合があります。
初期配置によって目的の配置に移動することができるかどうかの判断方法について調べていると、解説しているサイトを見つけました。
このサイトの下の方にある、14-15パズルは何故解けないか?(Jan 1996) pdf fileに解説があります。
14-15パズルは何故解けないか?(Jan 1996) pdf file の説明より、与えられた配置がゴール可能かどうかを、以下のようにして判定しています。
与えられた配置から、数字がカラの場所を0として、ひとふでがきのような順番で数字を並べていきます。 そこから0を除いたものを数列とします。。
縦のマス目の数が偶数になる場合、1行目は右から始めて、最後が右下のカドになるようにします。
初期配置の数列から、ゴールの数列にするための数字の移動距離の和が偶数、奇数で判断します。
上記の例の場合、移動距離の和は偶数の4なので、ゴールすることが可能です。
上記の判定方法を実装したJavaのサンプルプログラムは以下になります。
実際の配置で確認したい場合は、以下のページで、[手動配置]にチェックを付けて、番号を好きな位置に移動させてください。 そして[手動配置]のチェックを外します。チェックを外す時に、配置がゴール可能かどうかをチェックされます。 もし、ゴール不可能の場合は、以下のメッセージが表示されます。
3x3(8パズル)や4x4(15パズル)などのスライドパズルでは、全配置パターンの半分がゴール可能ということになります。
Android用のスライドパズルを公開しています。