N皇后
* * * *
拉格朗日计划
* * * *
N皇后

国际象棋棋盘的大小是$8\times 8$,皇后可以在行、列或斜线方向上吃子。

棋盘上最多可以放置八个无法相互攻击到的皇后,用一串数字表示这些皇后的站位,例如63571428。其中第i个数字是j就表示在第i行第j列放置一个皇后。

一般地,如何在$N\times N$的棋盘上放置N个无法相互攻击的皇后称为N皇后问题。对$4\le N\le 8$之间每个N,按上面的格式输出N皇后问题的全部解答,这些解答可以任意顺序输出。

本题难度:



解答

枚举全排列,一共只有不超过$8!=40320$中排列,这样可以保证每行每列都只有一个皇后。

对每个排列,检查这些皇后是否能在斜线方向上相互攻击,次\超主对角线和次\超反对角线可分别由i-j和i+j刻画,若这些值中各自没有重复,则说明不存在位于同一斜线上的皇后。

最终代码只有两行。

代码长度:180字节 vs. 全站第一:103字节。

import itertools as t
*map(print,["".join(map(str,c))for n in[4,5,6,7,8]for c in t.permutations(range(1,n+1))if len({i-c[i]for i in range(n)})==len({i+c[i]for i in range(n)})==n]),