其他分享
首页 > 其他分享> > 1128 N Queens Puzzle (20分)

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