n皇后問題回溯法 迭代實現

2021-10-10 23:11:52 字數 806 閱讀 3428

def place(x, t):

"""判斷當前列t放置的皇后是否合法

:param x: 當前解

:param t: 只確定了前t+1個皇后的位置

:return:

"""for i in range(t):

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

return false

return true

def backtrack(n):

"""迭代法求n皇后問題

:param n:

:return:

"""x = [-1] * n # 儲存某乙個解,每一列皇后放置的位置

t = 0 # 從第0列開始

result = # 所有可能的解

while t >= 0:

while x[t] < n - 1:

x[t] += 1

if place(x, t): # 當前狀態合法

if t == n - 1: # 求得乙個解

else:

t += 1

# 進行回溯

x[t] = -1

t -= 1

return result

if __name__ == '__main__':

n = 8

re = backtrack(n)

print("%d皇后解的個數:%s" % (n, len(re)))

print("解的詳情:%s" % re)

N 皇后問題 回溯法

n 皇后問題 在 n n 的棋盤上放置彼此不受攻擊的 n 個皇后,任意兩個皇后不同行 不同列 不同斜線。思路 1.因為皇后不能同行,所以,在每一行放置乙個皇后就行 2.當在一行放置皇后的時候 1 順序檢查這一行每乙個位置是否和上面所有的皇后,只要有乙個同列或者在斜線上就不能放置 若找到乙個滿足的,放...

回溯法 n皇后問題

問題描述 在nxn的棋盤上,放置彼此不受攻擊的n個皇后。規則 皇后可以攻擊與之在同一行,同一列,同一斜線上的棋子。以行為主導 不用再判斷是否同行了 演算法設計 1 定義問題的解空間 問題解的形式為n元組 分量xi表示第i個皇后放置在第i行,第xi列。2 解空間的組織結構 m叉樹 3 搜尋解空間 約束...

回溯法 N皇后問題

n 皇后問題研究的是如何將n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。不能相互攻擊就是n個皇后兩兩不能同行同列同對角線。示例 輸入 4 輸出 q 解法 1 q q q.q.解法 2 q q q 解釋 4 皇后問題存在兩個不同的解法。可以利用 回溯法子集樹 模板進行求解,每個節...