首页 > 解决方案 > 八皇后拼图-对角线图案

问题描述

我是编程新手,最近开始学习 Python。在练习使用 Loop 和解决八皇后谜题时,我很难找到检查对角线攻击的方法。我希望你能帮助我解决对角线模式。谢谢!

这是我到目前为止所写的:

A = []
for I in range(0,8):
    A.append([0,0,0,0,0,0,0,0])
for I in range(1,8):
    Valid = False
    while not Valid:
        S = input('Enter position'+ str(I) +' : ')
        X = int(S[0])-1
        Y = int(S[2])-1
        Valid = True
        for J in range(1,8):
            if A[X][J] > 0:
                Valid = False
            if A[J][Y] > 0:
                Valid = False
        if not Valid:
            print('Invalid Position!')
        else:
            A[X][Y] = 1

print(A)

标签: python

解决方案


一个很好的描述方法是不检查,A而是检查一组采取的行。例如,新皇后将采用“第 3 行”和“对角线 5”等。对角线可以用 X+Y 和 XY 编号。检查新女王将采用的四行是否尚未采用,如果尚未采用,则更新A和采用的行集。

A = []
for I in range(0,8):
    A.append([0,0,0,0,0,0,0,0])
taken = set()
for I in range(1,8):
    while True:
        S = input('Enter position'+ str(I) +' : ')
        X = int(S[0])-1
        Y = int(S[2])-1
        take = {('row', X),
                ('column', Y),
                ('diagonal', X+Y),
                ('antidiagonal', X-Y)}
        if take & taken:
            print('Invalid Position!')
        else:
            A[X][Y] = 1
            taken |= take
            break
print(A)

推荐阅读