0

我有一个使用这种重要方法的单线程 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”攻击

4

1 回答 1

1

在这里找到答案

迭代时从列表中删除项目

将迭代替换为

self.available = [x for x in self.available if not self.collision(poz, x)]
于 2012-11-09T14:56:46.767 回答