反向八皇后问题(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
相关产品推荐
相关产品推荐

