#矩陣表示棋盤
#字典queenlist表示已放置成功的皇后,key值代表列,value代表行
#encoding:utf-8
import numpy as np
#判斷該位置是否為危險位置
def issafe(col,row,queenlist):
for tempcol in range(col):
temprow=queenlist[tempcol]
if tempcol==col: #列重複
return false
if temprow==row: #行重複
return false
if col-row==tempcol-temprow or col+row==tempcol+temprow: #正負對角線重複
return false
return true
#遞迴放置皇后位置
def putqueen(col,queenlist):
row=0
foundsafepos=false
if col==8: #遞迴中止條件(成功)
foundsafepos=true
else:
while row<8 and not foundsafepos:
if issafe(col,row,queenlist):
queenlist[col]=row
foundsafepos=putqueen(col+1,queenlist)
if not foundsafepos:
row=row+1
else:
row=row+1
return foundsafepos
#矩陣的形式列印八皇后(1為皇后)
def showqueen(matrix,queenlist):
for col in queenlist.keys():
row=queenlist[col]
matrix[row][col]=1
print matrix
def main():
matrix=np.zeros([8,8],np.int) #棋盤矩陣
queenlist={} #key==col,value==row
cols=matrix.shape[1] #獲取矩陣的列數
flag=putqueen(0,queenlist)
if flag==true:
showqueen(matrix,queenlist)
else:
print '失敗'
if __name__=="__main__":
main()
python 八皇后問題
import random 衝突檢查,在定義state時,採用state來標誌每個皇后的位置,其中索引用來表示橫座標,基對應的值表示縱座標,例如 state 0 3,表示該皇后位於第1行的第4列上 def conflict state,nextx nexty len state for i in r...
python 八皇后問題
import random 衝突檢查,在定義state時,採用state來標誌每個皇后的位置,其中索引用來表示橫座標,基對應的值表示縱座標,例如 state 0 3,表示該皇后位於第1行的第4列上 def conflict state,nextx nexty len state for i in r...
Python實現八皇后問題
八皇后問題是指8 8位的棋盤上,擺8個皇后,使得任意乙個皇后不在其他皇后的同一橫線上,同一豎線上,同一斜線 包括右上到左下斜線和左上到右下斜線 上。這個問題是乙個經典的遞迴問題。八皇后問題主函式 n 0 總的解的數量 defehh sovle deep,graph,path 解決八皇后問題的函式 f...