#P10889. n皇后问题

n皇后问题

题目描述

八皇后问题由国际象棋棋手马克斯·贝瑟尔于 1848 年提出:在 8×8 的国际象棋棋盘上摆放 8 个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上。问有多少种摆法?
下图就是其中一种解法(图略)。

当然,八皇后问题的规则也可以推广到 n 皇后问题。例如,一个六皇后问题如下:

在一个 6×6 的棋盘上,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。

这个布局可以用序列 2 4 6 1 3 5 来描述,其中第 i 个数字表示在第 i 行的相应位置有一个棋子。对应关系为:

  • 行号:1 2 3 4 5 6
  • 列号:2 4 6 1 3 5

这只是一个解。请编写程序找出所有棋子的放置解。

所有解需按照上述序列方法输出,并按 字典序 排列。

最后一行输出解的总个数。


输入格式

一行一个正整数 n,表示棋盘大小为 n×n。


输出格式

  • 输出所有解,每行一个解。
  • 每个解中相邻两个数字之间用一个空格隔开。
  • 最后一行只输出一个整数,表示解的总数。

输入样例 #1

6

输出样例 #1

2 4 6 1 3 5
3 6 2 5 1 4
4 1 5 2 6 3
5 3 1 6 4 2
4

题目说明

  • 数据范围
    对于 100% 的数据,6 ≤ n ≤ 13。