python 八皇后問題

2021-07-16 08:48:08 字數 1366 閱讀 2873

#矩陣表示棋盤

#字典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...