|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这几天在学习递归求解N皇后问题时,努力了好久,总算是可以打印出所有的解了,但是想计算出总共有多少个解时,总是不对,代码如下:#chess为棋盘上棋子组成的一维数组
#n为递归次数
#N为皇后个数
def NQueen(chess,n,N):
global count
count = 0
if n==N:
print(chess)
count+=1
else:
for i in range(N):
chess[n]=i
flag = True
for j in range(0,n):
if(chess[j]==chess[n] or (chess[j]-chess[n])==(n-j) or (chess[j]-chess[n])==(j-n)):
flag = False
break
else:
flag = True
if flag:
NQueen(chess,n+1,N)
return count
n=int(input('请输入N皇后中的N值:'))
print('N皇后的解是:%d'% NQueen([0]*n,0,n))
运行结果:
------------------------
请输入N皇后中的N值:4
[1, 3, 0, 2]
[2, 0, 3, 1]
N皇后的解是:0
---------------------------
请输入N皇后中的N值:5
[0, 2, 4, 1, 3]
[0, 3, 1, 4, 2]
[1, 3, 0, 2, 4]
[1, 4, 2, 0, 3]
[2, 0, 3, 1, 4]
[2, 4, 1, 3, 0]
[3, 0, 2, 4, 1]
[3, 1, 4, 2, 0]
[4, 1, 3, 0, 2]
[4, 2, 0, 3, 1]
N皇后的解是:1
请高手指点
虽然看讲解然后自己能写出上面的代码了,但是总是感觉N皇后问题用递归解时,中间的过程还是没有完全弄明白,导致在计算N皇后的解的个数时,总是不对,难道不是每次n==N时就会有一组解吗?这个时候count+1为什么就是不行呢? |
|