问题描述:国际象棋,满足棋盘规则的皇后放置问题。给定每个皇后的坐标,判断是否符合规则。
解题思路:对角线abs(a[i]-b[j])==abs(i-j),水平和竖直方向,出现过相同的没?
AC代码:
#include<iostream>
using namespace std;
#define MAX 1005
int arr[MAX];
int main()
{
freopen("test.txt","r",stdin);
int i,j,k,K,N;
scanf("%d",&K);
while(K--){
scanf("%d",&N);
bool flag=0;
for(i=1;i<=N;++i)scanf("%d",&arr[i]);
for(i=1;i<=N;++i){
for(j=1;j<=N;++j){
if(i!=j){
if(arr[i]==arr[j]||(abs(arr[i]-arr[j])==abs(i-j))){//一行或对角
flag=1;break;
}
}
}
if(flag)break;
}
if(flag)printf("NO\n");
else printf("YES\n");
}
return 0;
}