八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8
的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后。为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n
,而皇后个数也变成n
。当且仅当n = 1
或n ≥ 4
时问题有解。
解题思路
- 首先观察可以发现,每一行或者每一列都有且只有一个皇后;
- 使用一个数组
x[8]
存储每一行皇后位置所对应的列数。例如:a[2] = 5
就表示第二行的皇后位于第五列;- 皇后不在一条直线上可以表示为条件
x[i] != x[j]
;- 皇后不在一条斜线上可以表示为条件
abs(x[i] - x[j]) != abs(i - j)
;