八皇后问题属于非常经典的算法问题。
先介绍下问题:
在一个8*8的国际象棋中,
放着八个皇后,使其互相不能攻击。
每个皇后的攻击范围为:皇后所在行、列以及对角线。
问题要求是找出所有可能的摆法。
这个问题其实挺像数独的,只不过数独只需要满足行列不重合即可。
然后呢,怎么解决这个问题呢,我先介绍一个比较容易接受的思路:
由于任意两个皇后都不可能在同一行,所以我们可以一行一行的往下摆,每行找个空位丢一个皇后即可。
首先第一行,找任一空位先丢一个皇后,如下(Q代表皇后,N代表空位):
Q, N, N, N, N, N, N, N
N, N, N, N, N, N, N, N
N, N, N, N, N, N, N, N
N, N, N, N, N, N, N, N
N, N, N, N, N, N, N, N
N, N, N, N, N, N, N, N
N, N, N, N, N, N, N, N
N, N, N, N, N, N, N, N
看起来空位其实还有很多,但是实际上Q所在的行、列、对角线已经不能放其他Q了,那我们何不把这些位置标出来呢,我用X来标记,如下:
Q, X, X, X, X