题目描述
N 皇后问题是指将 N 个皇后放置在 N×N 棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。
在本题中,你无需解决这一难题。
你需要做的是判断我们给出的棋子摆放是否是一种合理的摆放方案,即是否能够满足皇后之间不能相互攻击到。
为了简化棋盘的表示,让我们假设在同一列中不会放置两个皇后。
这样我们就可以用一个整数序列 Q1,Q2,…,QN 来表示一种棋盘摆放,其中 Qi 表示第 i 列的皇后所在的行号。
例如,下方左图的棋盘摆放可以用 (4, 6, 8, 2, 7, 1, 3, 5) 来表示,它是解决八皇后问题的一种合理摆放方案。
下方右图的棋盘摆放可以用 (4, 6, 7, 2, 8, 1, 9, 5, 3) 来表示,它并不是解决九皇后问题的一种合理摆放方案。
(呃,图片没法上)
样例
输入格式
第一行包含整数 K,表示共有 K 组测试数据。
每组测试数据占一行,首先包含整数 N,然后包含 N 个整数 Q1,Q2,…,QN。
输出格式
对于每组数据,如果是合理摆放方案,则输出 YES,否则输出 NO。
每个答案占一行。
数据范围
1<K≤200,
4≤N≤1000
1≤Qi≤N
输入样例:
4
8 4 6 8 2 7 1 3 5
9 4 6 7 2 8 1 9 5 3
6 1 5 2 6 4 3
5 1 3 5 2 4
输出样例:
YES
NO
NO
YES
算法1
淦,啥也不想写了
include [HTML_REMOVED]//万能头走起~
using namespace std;
const int N = 1010;
int loc[N];
bool check(int t)
{
for(int i=0;i[HTML_REMOVED]>k;
while(k–)
{
scanf(“%d”, &n);
for(int i=0;i<n;i++) scanf(“%d”, &loc[i]);
if(check(n)) printf(“YES\n”);
else printf(“NO\n”);
}
return 0;
}