八皇后问题~不过这次是给出你解决方案,你来判断OK不OK
那么结合题目的输入,八皇后要求:
1、一行只有一个 可以直接忽略
2、一列只有一个 输入必须都是不同值
3、斜对角线 遍历之前的判断abs(j-i)==abs(d[i]-d[j])
#include<bits/stdc++.h>
using namespace std;
bool Queen(int d[],int n){
set<int> s;
for(int i=1;i<=n;i++){
s.insert(d[i]);
for(int j=i-1;j>=1;j--){
if(abs(j-i)==abs(d[i]-d[j])) return false;
}
}
if(s.size()!=n) return false;
else return true;
}
int main(){
int k;
scanf("%d",&k);
while(k--){
int n;
int d[1001];
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&d[i]);
if(Queen(d,n)) printf("YES\n");
else printf("NO\n");
}
return 0;
}