python - 为什么这个用于 N-queen 问题的 python 代码不起作用?
问题描述
我处理了所有检查对角线和列的情况,是否回溯仍然无法找到我的代码的问题..请帮助!!!
def canPlace(i,j,n):
for r in range(0,i):
if board[r][j]==1:
return False
#checking for left diagonal
x=i
y=j
while x>=0 and y>=0:
if board[x][y]==1:
return False
x-=1
y-=1
#checking for right diagonal
x=i
y=j
while x>=0 and y<n:
if board[x][y]==1:
return False
x-=1
y+=1
# if safe to place
return True
def solveNQ(i,n):
#print("row=",i,board)
if i==n:
for i in range(0,n):
for j in range(0,n):
if board[i][j]==1:
print('Q',end=" ")
else:
print('_ ',end=" ")
print()
return True
for j in range(0,n):
if canPlace(i,j,n):
board[i][j]=1
if solveNQ(i+1,n):
return True
board[i][j]=0
return False
n=4
board=n*[n*[0]]
solveNQ(0,n)
canPlace() --检查是否可以安全保留queen(一种辅助函数) solveNQ()--main N-Queen 求解器方法
解决方案
推荐阅读
- amazon-web-services - Dialogflow+AWS Lambda 是否可以为 1 个请求再返回 2 个响应?
- r - 是否有用于将整个 df 转换为更低的 R 函数?
- c - 当隐式规则没有说明可执行文件时,make 如何从 C 源文件构建可执行文件?
- javascript - JavaScript 中的单精度数学
- angular - RxJS mergeMap 操作符内部的错误处理
- haskell - 基于两个不同函子的应用类型类
- tensorflow - 在神经网络中使用卷积层
- flutter - 关键字 future、async、await 是什么意思?
- session - Spring Security能否检测到当前会话与用户不一致
- javascript - 将触摸事件侦听器附加到 Firefox 中的视频元素