AcWing 1621. N 皇后问题
原题链接
简单
作者:
ACzwh
,
2023-01-28 15:42:12
,
所有人可见
,
阅读 153
#include <iostream>
#include <cmath>
using namespace std;
const int N = 1e3 + 10;
int k, n;
int row[N]; //数组下标表示列,元素表示在行
//反其道而行,如果是在同行同列或同对角线返回true,否则返回false
bool place(int n)
{
//双层循环遍历
for(int i = 0; i < n; i++)
{
for(int j = 0; j < i; j++)
{
//同行同列或同对角线
if(row[j] == row[i] || abs(i - j) == abs(row[j] - row[i]))
return true;
}
}
return false;
}
int main()
{
scanf("%d", &k);
while(k--)
{
scanf("%d", &n);
//依次读入每个皇后在第i列的row[i]行
for(int i = 0; i < n; i++) scanf("%d", &row[i]);
if(!place(n)) puts("YES");
else puts("NO");
}
return 0;
}