初学 Python , 写了一个八皇后的小程序,虽然算法效率不高,但这次是第一个用python实现
chess=[[0 for col in range(8)] for row in range(8)]
pos =0
i=0
flag =0
def check(i,pos):
if i==0:
return True
for counter in range(i):
if chess[counter][pos]==1:
return False
for x in range(min(i,pos)):
if chess[i-x-1][pos-x-1]==1:
return False
if pos<7:
for y in range(min(i,7-pos)):
if chess[i-y-1][pos+y+1]==1:
return False
return True
while i<8:
chess[i][pos]=1
if check(i,pos):
i=i+1
pos=0
else:
chess[i][pos]=0
while pos<7 and not check(i,pos):
pos=pos+1
if pos<=7 and check(i,pos):
chess[i][pos]=1
i=i+1
pos=0
else:
if (chess[i-1].index(1))<7:
pos = chess[i-1].index(1)+1
chess[i-1][pos-1]=0
i=i-1
else:
if i>=2:
pos =chess[i-2].index(1)+1
chess[i-1][7]=0
chess[i-2][pos-1]=0
i=i-2
else:
break
if 1 in chess[7]:
flag=flag+1
## print "%d:Found:"%(flag)
##
## for k in range(len(chess)):
## print chess[k]
##
## print
## print "*"*30
if (chess[7].index(1))<7:
pos = chess[7].index(1)+1
chess[7][pos-1]=0
i=7
else:
pos =chess[6].index(1)+1
chess[7][7]=0
chess[6][pos-1]=0
i=6
print "there are %d solutions" %flag
去掉程序中的注释,可以得到全部解:
****************************** 90:Found: [0, 0, 0, 0, 0, 0, 0, 1] [0, 1, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 1, 0, 0, 0] [0, 0, 1, 0, 0, 0, 0, 0] [1, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 1, 0] [0, 0, 0, 1, 0, 0, 0, 0] [0, 0, 0, 0, 0, 1, 0, 0] ****************************** 91:Found: [0, 0, 0, 0, 0, 0, 0, 1] [0, 0, 1, 0, 0, 0, 0, 0] [1, 0, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 1, 0, 0] [0, 1, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 1, 0, 0, 0] [0, 0, 0, 0, 0, 0, 1, 0] [0, 0, 0, 1, 0, 0, 0, 0] ****************************** 92:Found: [0, 0, 0, 0, 0, 0, 0, 1] [0, 0, 0, 1, 0, 0, 0, 0] [1, 0, 0, 0, 0, 0, 0, 0] [0, 0, 1, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 1, 0, 0] [0, 1, 0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0, 1, 0] [0, 0, 0, 0, 1, 0, 0, 0] ****************************** there are 92 solutions