1128 N Queens Puzzle (20分)
作者:互联网
题目链接:1128 N Queens Puzzle (20分)
题意
N皇后问题,简化问题,使每个皇后在不同的列,给出每列皇后所在的行号。判断是否符合N皇后规则。所有皇后在n*n棋盘中,任意两个皇后在不同行,不同列,不同对角线。
分析
依次对每一列的皇后判断是否与前面的皇后处于对角线上,在同一对角线上,停止检索,输出NO。所有都不在,检查是否每个行号都出现了。都出现了表示所有的皇后都不在同一行上。输出yes。
代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
const int maxn = 1100;
int a[maxn], book[maxn];
int main(int argc, char** argv) {
int n, t;
scanf("%d", &t);
while(t--) {
scanf("%d", &n);
memset(book, 0, sizeof(book));
int flag = 1, flag2 = 1;
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
book[a[i]] = 1;
if (flag == 1)
for (int j = 1; j < i; j++) {
if (abs(i - j) == abs(a[i] - a[j])) {
flag = 0;
break;
}
}
}
for (int i = 1; i <= n; i++)
if (book[i] == 0) {
flag2 = 0;
break;
}
if (flag == 1 && flag2 == 1)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
qq_37866436
发布了36 篇原创文章 · 获赞 0 · 访问量 711
私信
关注
标签:1128,20,int,Puzzle,book,maxn,对角线,皇后,include 来源: https://blog.csdn.net/qq_37866436/article/details/104443340