python 非遞歸解決n皇后問題的方法
復(fù)雜度可能高了點(diǎn)- - 也沒太注意
我想了好久 也找了好久 沒看到什么能夠用python解決n皇后問題而且不調(diào)用遞歸的 因?yàn)槲也惶芾斫膺f歸(尤其是到n層時(shí)) 智商受限- -
import copy
def check(A,x,y):
B=[]
flag=True
for i in range(len(A)):
for j in range(len(A)):
if A[i][j]==1:
B.append([i,j])
for m in range(len(B)):
p = B[m][0]
q = B[m][1]
if y == q or (x-p)==abs(y-q):
flag=False
return flag
def queen(n):
A=[[0 for __ in range(n)] for _ in range(n)]
answer=[]
for _ in range(n):
stack=[[0,_,A]]
while stack:
judge = 0
obj=stack.pop(-1)
x=obj[0]
y=obj[1]
array=obj[2]
flag=check(array,x,y)
if not flag:
while 1:
if check(array, x, y):
break
else:
if stack:
b=stack.pop(-1)
x=b[0]
y=b[1]
array=b[2]
else:
judge=1
break
if judge==1:
break
array=copy.deepcopy(array)
array[x][y]=1
for m in range(n):
if m!=y and m!=y-1 and m!=y+1 and x+1<n :
stack.append([x+1,m,array])
# print(array)
for j in range(len(array[n-1])):
if array[n-1][j]==1:
answer.append(array)
print(len(answer))
queen(8)
answer中存放的就是最后所有的可行組合
當(dāng)前解決的是8皇后問題
我的想法是用dfs 在每次搜索時(shí) 帶上該次搜索需要擺放的位置 x,y,以及待擺放的棋盤 即[x,y,A]
這樣不會(huì)導(dǎo)致所有的操作都在一個(gè)矩陣上進(jìn)行
到此這篇關(guān)于python 非遞歸解決n皇后問題的方法的文章就介紹到這了,更多相關(guān)python 非遞歸n皇后內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python生成每日?qǐng)?bào)表數(shù)據(jù)(Excel)并郵件發(fā)送的實(shí)例
今天小編就為大家分享一篇python生成每日?qǐng)?bào)表數(shù)據(jù)(Excel)并郵件發(fā)送的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-02-02
老生常談Python startswith()函數(shù)與endswith函數(shù)
下面小編就為大家?guī)硪黄仙U凱ython startswith()函數(shù)與endswith函數(shù)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
徹底解決No?module?named?‘torch_geometric‘報(bào)錯(cuò)的辦法
這篇文章主要給大家介紹了關(guān)于如何徹底解決No?module?named?‘torch_geometric‘報(bào)錯(cuò)的辦法,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-03-03
詳解Selenium如何使用input標(biāo)簽上傳文件完整流程
這篇文章主要介紹了詳解Selenium如何使用input標(biāo)簽上傳文件完整流程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
python中浮點(diǎn)數(shù)比較判斷!為什么不能用==(推薦)
這篇文章主要介紹了python中浮點(diǎn)數(shù)比較判斷!為什么不能用==,本文給大家分享問題解決方法,需要的朋友可以參考下2023-09-09
Python opencv圖像基本操作學(xué)習(xí)之灰度圖轉(zhuǎn)換
使用opencv將圖片轉(zhuǎn)為灰度圖主要有兩種方法,第一種是將彩色圖轉(zhuǎn)為灰度圖,第二種是在使用OpenCV讀取圖片的時(shí)候直接讀取為灰度圖,今天通過實(shí)例代碼講解Python opencv圖像基本操作學(xué)習(xí)之灰度圖轉(zhuǎn)換,感興趣的朋友一起看看吧2023-02-02
Python機(jī)器學(xué)習(xí)NLP自然語言處理基本操作電影影評(píng)分析
本文是Python機(jī)器學(xué)習(xí)NLP自然語言處理系列文章,帶大家開啟一段學(xué)習(xí)自然語言處理 (NLP) 的旅程。本篇文章主要學(xué)習(xí)NLP自然語言處理基本操電影影評(píng)分析2021-09-09

