You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

反向八皇后问题(P2)技术咨询:判断8皇后布局是否存在互相攻击情况

8皇后位置合法性校验实现

问题说明

在8×8的棋盘上放置8个皇后,要求任意两个皇后不能互相攻击——也就是不能处于同一行、同一列,或者同一条对角线上。现在需要根据输入的8组皇后坐标(行和列编号都是1到8),判断是否存在违规的皇后对:如果有,输出YES;如果所有皇后都符合规则,输出NO。

实现代码

我写了一段Python代码来完成这个校验:

def get_coords():
    x, y = input().split()
    x = int(x)
    y = int(y)
    return x, y

# 读取8个皇后的坐标
a, b = get_coords()
c, d = get_coords()
e, f = get_coords()
g, h = get_coords()
i, j = get_coords()
k, l = get_coords()
m, n = get_coords()
o, p = get_coords()

# 检查是否有同行或同列的皇后
if a==c or c==e or e==g or g==i or i==k or k==m or m==o or o==a or b==d or d==f or f==h or h==j or j==l or l==n or n==p or p==b:
    print("YES")
# 检查是否有皇后在主对角线(行号=列号)上重复
elif a==b and c==d or c==d and e==f or e==f and g==h or g==h and i==j or i==j and k==l or k==l and a==b:
    print("YES")
# 检查是否有皇后在副对角线(行号与列号的差的绝对值相等)上重复
elif abs(a-b)==abs(c-d) or abs(c-d)==abs(e-f) or abs(e-f)==abs(g-h) or abs(g-h)==abs(i-j) or abs(i-j) == abs(k-l) or abs(k-l)==abs(a-b):
    print("YES")
else:
    print("NO")

测试示例

示例输入

1 3
2 1
3 2
4 3
5 4
6 6
7 8
8 5

示例输出

NO

内容的提问来源于stack exchange,提问作者Meno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 19:47:41