本文主要是介绍1128 N Queens Puzzle,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
![]() ![]() |
题目大意
给出一个皇后图,以这样的方式给出:一个数组包含n个数字,每个数字表示该列的皇后所在的行数,判断给出的皇后图是否满足不会互相攻击(任意两个皇后都要不在同一行或者同一列,且不在斜对角线上)。思路解析
第一次操作八皇后问题,见识到了对角线问题的处理方法。用vec[n]存储一张图给出的数字~对于第j个数字,判断前0~j-1个数字中是否有在同一行的(v[j] == v[t])和在斜对角线上的(abs(v[j]-v[t]) == abs(j-t))(因为已经告诉肯定不在同一列了,所以不需要判断是否在同一列)如果发现了不满足的情况,就将flag由true标记为false,最后根据flag是true还是false输出对应的YES还是NO即可。
参考自:https://www.liuchuo.net/archives/3796 传送门
示例代码
#include<iostream>
#include<vector>
using namespace std;
int main() {int k, n;scanf("%d", &k);for (int i = 0; i < k; i++) {//执行k次scanf("%d", &n);vector<int> vec(n);bool flag = true;for (int j = 0; j < n; j++) {scanf("%d", &vec[j]);for (int t = 0; t < j; t++) {if (vec[t] == vec[j] || abs(vec[t] - vec[j]) == abs(t - j)) {//行数之差 == 列数之差,说明存在对角flag = false;break;}}}cout << (flag == true ? "YES\n" : "NO\n");}return 0;
}
这篇关于1128 N Queens Puzzle的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!