python回朔演算法解八皇后問題

2021-07-24 20:38:22 字數 795 閱讀 7566

八皇后問題的解題思路:

總共有92種解法,這裡舉例一種

def place(x, k): #判斷是否衝突

for i in range(1, k):

#x[i] == x[k]判斷是否為同一行

# abs(x[i] - x[k]) == abs(i - k)判斷是否在k個的對角線上

if x[i] == x[k] or abs(x[i] - x[k]) == abs(i - k):

return false

return true

def queens(n):

k = 1 #設定初始皇后為第乙個

x = [0 for row in range(n + 1)]# 設定x列表初始值為0

while k > 0:

x[k] = x[k] + 1 # 在當前列的下一列開始

x[k] = x[k] + 1

if x[k] <= n:# 判斷是否為最後乙個,不是就執行下一行

if k == n:# 是最後乙個皇后,退出

break

else: # 不是,則處理下一行皇后

k = k + 1 #執行下一行

x[k] = 0 #初始化,從第一列開始

else:#n列均不滿足,回溯到上一行

x[k] = 0 #初始化列到第一列

k = k - 1 #回溯到上一行

return x[1:] #返回1-8個皇后的位置

print(queens(8))

回朔法 八皇后問題

八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。假設八個皇后的位置分別用x1到x8表示,那麼xi可以取的值為1 8...

八皇后問題的回朔法求解

1.問題背景 前幾天上演算法課的時候老師簡單介紹了一下八皇后問題,課後感覺這個問題挺有趣的所以自己編了一下,發現對於我這種初學者來說還是有一定的難度,下面我詳細分析一下這個問題。八皇后問題,是乙個古老而著名的問題,是 回溯演算法 的典型案例。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8...

20190915學習PYTHON 八皇后問題

20190915學習python 八皇后問題 剛剛開始學習python。先試完成乙個經典的深度優先演算法,就是八皇后問題。一邊學一邊查,完成了 python八皇后問題求解 2019 9 15 n 8 數量 nsolve 0 解的個數 a 0 n 用於儲存各行上皇后的位置,使用列表 檢查乙個位置第p行...