我有一个使用这种重要方法的单线程 Python 模块(用于解决 n-Queen 问题):
def step(self):
r = Random()
poz = r.choice(self.available) #!!!problem here
#poz = 9 #this will work
for p in self.available:
if self.collision(poz, p): # this method fails with the usage of random
self.available.remove(p)
self.state.queens.append(poz)
self.debug()
return True
如果我给它一个像 9 或其他任何值的常量值,该方法将正常工作,但如果我想使用随机函数选择从可用(数字列表)中选择一个值,则碰撞()方法无法正常工作通过错过一些。
如果有帮助,这里是碰撞方法:
def collision(self, a, b):
x1, y1 = a / self.n, a % self.n
x2, y2 = b / self.n, b % self.n
return x1 == x2 or y1 == y2 or abs(x1 - x2) == abs(y1 - y2)
基本上,它检查棋子“b”是否可以被皇后“a”攻击