8-Qeen問題
JavaScript_パズル&クイズ へ戻る
大学生のための数学 へ戻る
2024.03.22


  8-Qeen問題は、 下図のように、 8×8マスの中に、 縦横斜めが重ならないように8枚のコインを配置する方法を求める問題です。

            

  マスの行を上から順に 1 〜 8 、 マスの列を左から順に 1 〜 8 とします。 n 行 m 列 のマスの中に n+m の数字を入れていきますと、 同じ数が斜めに並びます。 また、 n 行 m 列 のマスの中に n−m+9 の数字を入れていきますと、 同じ数が斜めに並びます。

    

  このことを応用して、 8王妃パズルを解くプログラムを作ることができます。
次のプログラムはバックトラック法を利用しています。
  

  

 このバックトラック法を利用したプログラムのアルゴリズムの骨子は次のようなものです。
 まず、8個のクィーンを次のように斜めに仮に並べます。
   (1,1) (2,2) (3,3) (4,4) (5,5) (6,6) (7,7) (8,8)
 次に、(1,1) に配置しているクィーンを有効にします。すると、他の7個のクィーン達はすべて置けない所に仮置き状態になります。そこで、2行目のクィーンを1つだけ右に移動させます。このとき、他のクィーンを1つだけ移動させて同じ列に2個以上重ならないようにします。そこで、2行目に仮置かれたクィーンが置いても良い所にあるのかどうかを調べてOKならば有効にします。有効にすることができないのならば、さらに2行目のクィーンをもう1つだけ右に移動させます。このときも、他のクィーンを1つだけ移動させて同じ列に2個以上重ならないようにします。そして、2行目に仮置かれたクィーンが置いても良い所にあるのかどうかを調べてOKならば有効にします。このような操作を繰り返して行い、行き詰まったら、1つ前の所までバックしてからやり直します。