写了一个八皇后解法

先用最笨的穷举法求解,有空再研究更好的解法:

#  -*- coding: gb2312 -*-

size 
=   8        #  棋盘大小
EMPTY  =   " O "     #  空位
QUEEN  =   " X "     #  皇后

#  查看棋盘的信息
def  show_board(cols):
    
for  i  in  range( 1 , size  +   1 ):
        
for  j  in  range( 1 , size  +   1 ):
            
if  j  ==  cols[i]:
                
print  QUEEN,
            
else :
                
print  EMPTY,
        
print   " /n " ,

#  检测棋盘上皇后摆法是否合法
#
 return:
#
        True(不冲突), False(有冲突)
def  check_board(cols):
    
for  i  in  range( 1 , size):
        
for  j  in  range(i  +   1 , size  +   1 ):
            
if  (j  -  i)  ==  abs(cols[j]  -  cols[i]):
                
return  False
    
return  True

solve_count 
=  0

for  a  in  range( 1 , size  +   1 ):
    
for  b  in  range( 1 , size  +   1 ):
        
for  c  in  range( 1 , size  +   1 ):
            
for  d  in  range( 1 , size  +   1 ):
                
for  e  in  range( 1 , size  +   1 ):
                    
for  f  in  range( 1 , size  +   1 ):
                        
for  g  in  range( 1 , size  +   1 ):
                            
for  h  in  range( 1 , size  +   1 ):
                                
if  a  <>  b  and  a  <>  c  and  a  <>  d  and  a  <>  e  and  a  <>  f  and  a  <>  g  and  a  <>  h  and  b  <>  c  and  b  <>  d  and  b  <>  e  and  b  <>  f  and  b  <>  g  and  b  <>  h  and  c  <>  d  and  c  <>  e  and  c  <>  f  and  c  <>  g  and  c  <>  h  and  d  <>  e  and  d  <>  f  and  d  <>  g  and  d  <>  h  and  e  <>  f  and  e  <>  g  and  e  <>  h  and  f  <>  g  and  f  <>  h  and  g  <>  h:
                                    cols 
=  [0,a,b,c,d,e,f,g,h]
                                    
if  check_board(cols):
                                        solve_count 
+=   1
                                        show_board(cols)
                                        
print   " /n " ,

print   " found %i solves. "   %  solve_count

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值