我正在用pygame开发一个N-Queen模拟程序。在
class NQ:
def __init__(self,n):
self.size = n
self.columns = [] * self.size
self.places = 0
self.backtracks = 0
def place(self, startRow=0):
if len(self.columns) == self.size:
return self.columns
else:
for row in range(startRow, self.size):
if self.isSafe(len(self.columns), row) is True:
self.columns.append(row)
self.places += 1
return self.place()
else:
lastRow = self.columns.pop()
self.backtracks += 1
return self.place(startRow=lastRow + 1)
def isSafe(self, col, row):
for threatRow in self.columns:
threatCol = self.columns.index(threatRow)
if row == threatRow or col == self.columns.index(threatRow):
return False
elif threatRow + threatCol == row + col or threatRow - threatCol == row - col:
return False
return True
def process(n):
nqueens = NQ(n)
nqueens.place(0)
return nqueens.columns
作为另一个棋盘输入程序,它们也相应地作为一个棋盘输入。
如果我想显示皇后区的移动,如何从递归code
过程动态传递列表,以便可以看到确切的回溯过程。
谢谢你
如果我理解正确,您只需要将基本python类型的列表传递给另一个python进程,您希望从这里调用它。您可以使用任何序列化和反序列化的方法。在
一个简单的方法是(如果您的列表真的只包含诸如int、float、string等基本类型)使用JSON
在另一个过程中,只需通过doin反序列化
^{pr2}$我没试过那个代码,也许它不能运行,但主要思想应该很清楚。在
如果在同一目录中有两个文件,则可以执行以下操作:
文件1.py
文件2.py
您可以使用
import
进行此操作。在如果你想知道递归函数内部发生了什么,你可以添加外部函数作为参数,然后你可以在递归内部使用它来打印算法的当前状态或在棋盘上画皇后。在
在示例中,我使用
show_colums()
在每次self.place()
运行时打印self.columns
。在文件:不合格品在
文件:主.py在
^{pr2}$部分结果
相关问题 更多 >
编程相关推荐