#USACO1655. 棋盘挑战

棋盘挑战

问题描述

检查一个如下的6×66 \times 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行,每列,每条对角线(包括两条主对角线的所有对角线)上都至多有一个棋子,如下例,就是一种正确的布局。

0   1   2   3   4   5   6  
  -------------------------  
1 |   | O |   |   |   |   |
  -------------------------  
2 |   |   |   | O |   |   |
  -------------------------  
3 |   |   |   |   |   | O |
  -------------------------  
4 | O |   |   |   |   |   |
  -------------------------  
5 |   |   | O |   |   |   |
  -------------------------  
6 |   |   |   |   | O |   |
  -------------------------

上面的布局可以用序列2 4 6 1 3 5来描述,第i个数字表示在第i行的相应位置有一个棋子,如下: 行号 1 2 3 4 5 6 列号 2 4 6 1 3 5 这只是跳棋放置的一个解。请写一个程序找出所有跳棋放置的解,并把它们以上面的序列方法输出。解按字典顺序排列,请输出前3个解,最后一行是解的总个数。

输入格式

一个数字NN 表示棋盘是N×NN \times N大小的。

输出格式

前三行为前三个解,每个解的两个数字之间用一个空格隔开。第四行只有一个数字,表示解的总数。

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

提示

(6<=N<=14) (6<=N<=14)