目的:判断是不是Queens Puzzle
输入:
K 例子个数,[1 200]
N 图片大小,[4 1000]
输出:
是的输出,YES
不是输出,NO
算法:
不在一行好判断,不在一条斜线上,在一条斜线上的两个点,要不行列的和相等,要不行列的差相等。
#include<stdio.h>
#include<algorithm>
using namespace std;
const int maxn = 1010;
int r[maxn],d1[maxn],d2[maxn];
int K,N;
int main()
{
scanf("%d",&K);
for(int i=0;i<K;i++)
{
scanf("%d",&N);
for(int j=1;j<=N;j++)
{
int c;
scanf("%d",&c);
r[j] = c;
d1[j] = c + j;
d2[j] = c - j;
}
sort(r+1,r+N+1);
sort(d1+1,d1+N+1);
sort(d2+1,d2+N+1);
int flag = 0;
for(int j=1;j<N;j++)
{
if(r[j]==r[j+1]||d1[j]==d1[j+1]||d2[j]==d2[j+1])
{
printf("NO\n");
flag = 1;
break;
}
}
if(flag==0)
printf("YES\n");
}
return 0;
}
反思:
其实可以用两点比较,相当于一个三角形,两点的行距和列距相等,就在一条斜线上。