鱼C论坛

 找回密码
 立即注册
查看: 2991|回复: 3

递归求解N皇后时怎样计算出解的个数

[复制链接]
发表于 2017-8-26 22:24:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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为什么就是不行呢?

本帖被以下淘专辑推荐:

  • · 算法|主题: 1, 订阅: 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-8-26 23:23:40 | 显示全部楼层
在网上找到答案了,原来很简单,不好意思再问各位大神了,前面已经犯了一个低级错误了,还是关了这个帖子吧,以后发贴子前自己先仔细想想,关了,不好意思。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-26 23:43:21 | 显示全部楼层
本帖最后由 hackmeng 于 2017-8-26 23:48 编辑

共同学习,我也是新手,n==N 是最小计算,直接return就行了,不能再加1了哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-27 10:02:27 | 显示全部楼层
不是,应该把count的定义放在主程序里面,NQueen函数里面不能赋值为0,如果赋值为0每次就初始化了,起不到记数的作用,只需要在主程序里面定义count,然后NQueen里面每次n==N的时候就加1,最后在主程序里面输出就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 01:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表