写了一个八皇后解法

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

# -*- 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值