この重要なメソッドを備えたシングルスレッドの 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 などの定数値を指定すると、メソッドは正常に動作しますが、ランダム関数の選択を使用して、使用可能な (数値のリスト) から値を選択する場合、collision()メソッドは正しく動作しません。一部を逃すことによって。
これが役立つ場合の衝突方法は次のとおりです。
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」によって攻撃可能かどうかをチェックします