[Python] python采用右递归的超简单八皇后解决 →→→→→进入此内容的聊天室

来自 , 2019-06-22, 写在 Python, 查看 122 次.
URL http://www.code666.cn/view/1e69276e
  1. def Test(queen,n):
  2.         '''这个就不用说了吧,就是检验第n(下标,0-7)行皇后的位置是否合理'''
  3.         q=queen[n]
  4.         for i in xrange(n):
  5.                 if queen[i]==q or queen[i]-q==n-i or queen[i]-q==i-n:return False
  6.         return True
  7.  
  8. def Settle(queen,n):
  9.         '''这个负责安置第n(下标,0-7)行皇后,每次调用,皇后都至少会移动一步'''
  10.         queen[n]+=1
  11.         while queen[n]<8 and not Test(queen,n):queen[n]+=1
  12.         return queen[n]<8
  13.        
  14. def Solve(queen,n):
  15.         '''这个负责解决第n(下标,0-7)行皇后的安置以及随后所有皇后的安置'''
  16.         if n==8:#安置完所有皇后了,故输出列表
  17.                 print queen
  18.                 return True#如果设为假,则会尝试所有的安置方案
  19.         else:
  20.                 queen[n]=-1#初始化第n行皇后的起始位置(起始位置-1,可安置在0-7)
  21.                 while Settle(queen,n):#如果成功安置皇后
  22.                         if Solve(queen,n+1):#安置其余皇后
  23.                                 return True#成功安置,返回真
  24.         return False#失败,返回假
  25.  
  26. if __name__=='__main__':
  27.         Solve([-1 for i in range(8)],0)#列表的值可以随便设置,因为会初始化
  28.  
  29. #虽然我们没有进行回溯,但事实上,我们每一个参数相同的Solve函数都尝试了多次
  30. #输出:[0, 4, 7, 5, 2, 6, 1, 3]
  31. #比回溯法容易多了吧
  32. #//python/5776

回复 "python采用右递归的超简单八皇后解决"

这儿你可以回复上面这条便签

captcha