鱼C论坛

 找回密码
 立即注册
查看: 1835|回复: 10

[已解决]八皇后问题

[复制链接]
发表于 2017-3-25 09:14:12 | 显示全部楼层 |阅读模式

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

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

x
python基础教程中 有个八皇后问题,他的那个参数 state = () 值是怎么变化的,他不是个空元组吗 怎么还会更改
最佳答案
2017-3-25 20:02:08
137850661195 发表于 2017-3-25 10:05
queen函数中那个参数state=(),他不是个空元组吗,元组不是不可以修改吗,那他的值为什么变化,还有传到co ...

元祖的内容是不能改变的,程序中也并没有改变元祖的值,而是每次都重新赋值,state+(pos,),重新赋值是可以的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-3-25 09:20:33 | 显示全部楼层
def conflict(state, nextX):
    nextY = len(state)
    for i in range(nextY):
        if abs(state[i]-nextX) in (0, nextY-i):
            return True
    return False

def queens(num, state=()):
    for pos in range(num):
        if not conflict(state, pos):
            if len(state) == num-1:
                yield (pos, )
            else:
                for result in queens(num, state+(pos,)):
                    yield (pos, ) + result


这是那个代码,求大神帮忙看一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-25 09:36:09 | 显示全部楼层
  1. #coding:utf-8

  2. def conflict(state, nextX):
  3.         nextY = len(state)
  4.         for i in range(nextY):
  5.                 if abs(state[i] - nextX) in (0, nextY - i):
  6.                         return True
  7.         return False

  8. def queens(num = 8, state = ()):
  9.         for pos in range(num):
  10.                 if not conflict(state, pos):
  11.                         if len(state) == num - 1:
  12.                                 yield (pos,)
  13.                         else:
  14.                                 for result in queens(num, state + (pos,)):
  15.                                         yield (pos,) + result
  16. c = 0
  17. for res in queens(8):
  18.         c += 1
  19.         print ('Solution %d: ' % c)
  20.         chest = [[0]*len(res) for i in range(len(res))]
  21.         for i in range(len(res)):
  22.                 chest[i][res[i]] = 1
  23.                 print (chest[i])
  24.         print ()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-25 09:54:27 | 显示全部楼层

关于state哪儿我不太懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-25 09:57:18 | 显示全部楼层
137850661195 发表于 2017-3-25 09:54
关于state哪儿我不太懂

哪一段
具体点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-25 10:03:20 | 显示全部楼层

queen函数中那个参数state=(),他不是个空元组吗,元组不是不可以修改吗,那他的值为什么变化,还有传到conflict中时,那个state不是指向state的第一个元素吗,可是他里面就没有东西,那这个state[0]的值是多少
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-25 10:05:57 | 显示全部楼层

queen函数中那个参数state=(),他不是个空元组吗,元组不是不可以修改吗,那他的值为什么变化,还有传到conflict中时,那个state不是指向state的第一个元素吗,可是他里面就没有东西,那这个state[0]的值是多少
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-25 10:38:26 | 显示全部楼层

是我问的问题太简单了吗,如果太简单了麻烦告诉我我该学哪方面知识
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-25 20:02:08 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
137850661195 发表于 2017-3-25 10:05
queen函数中那个参数state=(),他不是个空元组吗,元组不是不可以修改吗,那他的值为什么变化,还有传到co ...

元祖的内容是不能改变的,程序中也并没有改变元祖的值,而是每次都重新赋值,state+(pos,),重新赋值是可以的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-26 10:16:18 | 显示全部楼层
jerryxjr1220 发表于 2017-3-25 20:02
元祖的内容是不能改变的,程序中也并没有改变元祖的值,而是每次都重新赋值,state+(pos,),重新赋值是可 ...

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-26 10:20:30 | 显示全部楼层
本帖最后由 137850661195 于 2017-3-26 10:24 编辑
jerryxjr1220 发表于 2017-3-25 20:02
元祖的内容是不能改变的,程序中也并没有改变元祖的值,而是每次都重新赋值,state+(pos,),重新赋值是可 ...


最后问一下,那个判断冲突的函数,如果把state=()传过去后,他是怎么执行的,比如len(state)和state【i】是多少,麻烦帮我解决最后一个问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 18:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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