python - 一维 N 皇后数组 (Python) 求解函数
问题描述
我知道 N_Queens 是一个很好的话题,但我必须找到一个使用 1D 数组的好的 python 解决方案(重要的是,通过填充 1d 数组然后通过函数将其转换为 2d 数组来解决)。
到目前为止,我已经完成了(我认为我做得太复杂的)打印和检查功能,但我似乎无法完成求解功能。
global queens
queens = []
def printQ():
for i in queens:
for row in range(8):
if row == i:
print(" Q",end="")
else:
print(" .",end="")
print(" ")
def solve(x):
step = len(queens)
for indices in range(step):
if (x == queens[indices]):
return False
for i in range(step,0,-1):
if (x == queens[0-i]-i) or (x == queens[0-i]+i):
return False
else:
return True
def complete():
for i in range(8):
if solve(i) == True:
queens += [i]
elif solve(i) == False:
queens = queens - [i]
else:
return
如果可能,我尝试遍历列表并将元素放置在全局 [queens] 中。每次我尝试更改 complete() 时,我要么得到一个空列表,要么得到一个错误。我试图通过回溯解决这个问题,但我不确定我的伪代码应该如何查找完整()
任何建议将不胜感激,如果我的代码质量不高,仍然是初学者,我们深表歉意。
注意:要证明这两个函数都有效,只需将项目添加到数组 [1,4,2] 中即可。
解决方案
如果要从函数更改全局变量,则需要将其标记为全局变量,否则,函数会将该变量视为局部变量。这就是你得到的。您在函数中得到空queens
列表。complete
请注意,您可以引用全局(就像您在printQ
和solve
函数中所做的那样,但如果您要更改它(就像您在complete
函数中所做的那样),您必须将其标记为global
。这是一个如何做到这一点的示例。你也不要'不需要在模块级别将其标记为全局(代码中的第一行)它必须在函数级别
def complete():
global queens
for i in range(8):
if solve(i) == True:
queens += [i]
elif solve(i) == False:
queens = queens - [i]
else:
return
推荐阅读
- python - 如何在 pyspark 中使用 7 天的滚动窗口使用 avg 实现填充 na
- r - R用NA替换第一个n列值
- excel - 如何捕获用户的 Outlook 电子邮件地址?
- reactjs - 当状态更新时,我们也想更新 React-Select 的 defaultValue
- bash - 如何逐行读取文件,并将 5 的值添加到美元金额的每个实例中并将其写入新文件
- python - 绘制带有两个 x 标签索引的图形 - 日期和时间
- c# - 如何使用 iText Sharp 正确查看 PDF 数字签名外观上的阿拉伯文本?
- mysql - 如何在 Azure 虚拟机中备份 MySQL 数据库,并使用带有 Python 的 Azure 函数将备份发送到 Blob 存储
- c# - 如何从列表中获取第二个元素
- cobol - 在 COBOL 程序中出现重叠错误