题目大意
给出一个皇后图,以这样的方式给出:一个数组包含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
++) {
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;
}
转载请注明原文地址: https://mac.8miu.com/read-495276.html