鱼C论坛

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

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

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

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

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

x
这几天在学习递归求解N皇后问题时,努力了好久,总算是可以打印出所有的解了,但是想计算出总共有多少个解时,总是不对,代码如下:
  1. #chess为棋盘上棋子组成的一维数组
  2. #n为递归次数
  3. #N为皇后个数
  4. def NQueen(chess,n,N):
  5.    global count
  6.    count = 0
  7.    if n==N:
  8.       print(chess)
  9.       count+=1
  10.    else:
  11.       for i in range(N):
  12.         chess[n]=i
  13.         flag = True
  14.         for j in range(0,n):
  15.             if(chess[j]==chess[n] or (chess[j]-chess[n])==(n-j) or (chess[j]-chess[n])==(j-n)):
  16.                 flag = False
  17.                 break
  18.             else:
  19.                 flag = True
  20.         if flag:
  21.            NQueen(chess,n+1,N)
  22.    return count
  23. n=int(input('请输入N皇后中的N值:'))
  24. 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
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

共同学习,我也是新手,n==N 是最小计算,直接return就行了,不能再加1了哦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-5 21:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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