ゲーム一覧

エイトクイーン

たて・よこ・ななめに2個並ばないように置く

クイーン 0 / 80:00

マスを押してクイーンを置こう

見つけた解(8×8)

押すと盤に出します

エイトクイーンの遊び方

コツ

解は何通り?

盤解の数まとめた数*
4×421
5×5102
6×641
7×7406
8×89212
9×935246
10×1072492

* 回転したり裏返したりすると重なる解を1つと数えた数。8×8では、12通りのうち11通りは向きを変えた形が8つずつ、残りの1通りは半回転すると同じ形になるので4つで、11×8+4=92通りです。

8クイーン問題をコンピューターで解く(バックトラック)

コンピューターはバックトラックで解きます。1段目にクイーンを置き、次の段の安全なマスに置き、と1段ずつ進めます。安全なマスが無い段に来たら1つ前の段に戻り、そのクイーンを次の安全なマスへ動かします。全部の解を数える短い JavaScript の例です。

function solve(n, row = 0, cols = []) {
  if (row === n) return 1; // n 個置けた
  let count = 0;
  for (let c = 0; c < n; c++) {
    // 上の段のどのクイーンとも、同じ列・ななめでなければ置ける
    const safe = cols.every((pc, pr) => pc !== c && Math.abs(pc - c) !== row - pr);
    if (safe) count += solve(n, row + 1, [...cols, c]);
  }
  return count;
}
solve(8); // 92

エイトクイーンの由来

1848年にチェスの問題作家マックス・ベッツェル(Max Bezzel)が出した問題で、1850年にフランツ・ナウク(Franz Nauck)が初めて解を発表しました。ガウスなど多くの数学者も取り組みました。1972年にはダイクストラ(Edsger Dijkstra)が構造化プログラミングの例に使い、深さ優先のバックトラックの手順を示しました。