class Queens:
def __init__(self,num=8):
"""
传入num指定方格尺寸
:param num:
"""
self._find = False
self._num = num
self._result = [None]*self._num
self.lay_queen(0)
def lay_queen(self,row):
if row == self._num:
# 找到了一组解
self._find = True
self.print_queens()
return
if self._find:
# 当前已经找到了一组解则不再继续
return
if row<self._num:
col = 0
while col < self._num:
#还未找到解
if self.is_ok(row,col):
self._result[row]=col
self.lay_queen(row+1)
col+=1
def is_ok(self,row,col):
if row==0:
return True
upleft = col - 1
upright = col + 1
for r in range(row-1,-1,-1):
if self._result[r]==col:
return False
if upleft>=0:
if self._result[r]==upleft:
return False
if upright <=self._num-1:
if self._result[r]==upright:
return False
upright+=1
upleft-=1
return True
def print_queens(self):
print(self._result)
if __name__ == '__main__':
q = Queens(4)
N皇后问题
最新推荐文章于 2022-12-01 10:22:27 发布