枚举全排列,一共只有不超过$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]),
|