|

楼主 |
发表于 2017-8-26 22:09:16
|
显示全部楼层
本帖最后由 chunchun2017 于 2017-8-26 22:12 编辑
刚仔细分析了一下,发现for i in range(8)循环体第一次运行的时候,for j in range(0,i)是不会被运行的,因为此时i=0,这时就会跳过下面的flag=Flase和flag=True的定义,直接运行if flag:EightQueen(chess,n+1),此时会需要判断flag的值,所以就会提示flag在分配前被引用了,
只需要在for j in range(0,i)前增加flag的赋值就可以了
- #chess为棋盘上棋子组成的一维数组
- #n为递归次数
- #N为皇后个数
- def NQueen(chess,n,N):
- count = 0
- if n==N:
- print(chess)
- 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)
- NQueen([0]*4,0,4)
复制代码 |
|