原题链接:Acwing 1621. N 皇后问题
这道题开始交上去的时候4个测试点只过了3个,后来才发现原因:
本题是随机给的一段序列,所以我们要判断的不只是每一个皇后是否在一个对角线上,还要判断是否是同一行,上一道8皇后问题:Acwing 3472. 八皇后 递归回溯优化在判断的时候条件只有“是否在一个对角线”,因为它每一次枚举的时候已经排除了“皇后是同一行”的情况,注意这两道题的区别,写题的时候要细心。
#include <bits/stdc++.h>
using namespace std;
const int M=1e6+10;
int a[1010];
int main()
{
std::ios::sync_with_stdio(false);
int k;
cin>>k;
while(k--)
{
int n;
cin>>n;
memset(a,0,sizeof a);
for(int i=0;i<n;i++)
{
cin>>a[i];
}
int flag=1;
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(a[i]==a[j] || abs(i-j)==abs(a[i]-a[j]))
{
flag=0;
break;//不符合条件,及时退出
}
}
if(!flag)
break;
}
if(flag)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}