python - 八皇后拼图-对角线图案
问题描述
我是编程新手,最近开始学习 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)
解决方案
一个很好的描述方法是不检查,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)
推荐阅读
- cannon.js - 我不知道如何在本网站的问题/答案代码截图之外呈现此代码,我需要将结果显示给某人
- r - 相同值的 geom_col() 和 geom_point() 之间的差异
- python - 离线将Zpl转换为pdf
- amazon-web-services - 在 Lambda 中获取用户的 IP 地址(使用 API Gateway 和 Python)
- elasticsearch - Elasticsearch:如何返回包含搜索到的确切单词的文档,而不是返回句子中包含该单词的所有文档?
- python-3.x - 如何在python中拆分字符串?
- java - 除当前索引值外的新数组中数组的乘积
- server - 如何在无服务器中从 Secret Manager 获取机密
- java - Quickfixj - 不支持的消息类型 - 执行报告 - Fix50 SP2
- python - Deeplabcut 中的难度训练数据集