回溯法解決n後問題python代碼
八皇后問題,一個古老而著名的問題,是回溯算法的典型案例。該問題由國際西洋棋棋手馬克斯·貝瑟爾於 1848 年提出:在 8×8 格的國際象棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。高斯認爲有 76 種方案。1854 年在柏林的象棋雜誌上不同的作者發表了 40 種不同的解,後來有人用圖論的方法解出 92 種結果。計算機發明後,有多種計算機語言可以編程解決此問題。
import math
import pdb
def Backtrack(t):
if t >= n:
print(rect)
else:
for i in range(1,n+1):
rect[t] = i
if Place(t):
Backtrack(t+1)
def Place(k):
for j in range(0,k):
if rect[j] == rect[k] or abs(j-k) == abs(rect[j] - rect[k]):
return False
elif abs(rect[k-1] - rect[k]) == 1:
return False
return True
if __name__ == '__main__':
n = input()
n = int(n)
rect = [0 for i in range(n)]
print('輸入:', str(rect))
Backtrack(0)
測試輸入: 8 預期輸出: 輸入: [0, 0, 0, 0, 0, 0, 0, 0] [1, 5, 8, 6, 3, 7, 2, 4] [1, 6, 8, 3, 7, 4, 2, 5] [1, 7, 4, 6, 8, 2, 5, 3] [1, 7, 5, 8, 2, 4, 6, 3] [2, 4, 6, 8, 3, 1, 7, 5] [2, 5, 7, 1, 3, 8, 6, 4] [2, 5, 7, 4, 1, 8, 6, 3] [2, 6, 1, 7, 4, 8, 3, 5] [2, 6, 8, 3, 1, 4, 7, 5] [2, 7, 3, 6, 8, 5, 1, 4] [2, 7, 5, 8, 1, 4, 6, 3] [2, 8, 6, 1, 3, 5, 7, 4] [3, 1, 7, 5, 8, 2, 4, 6] [3, 5, 2, 8, 1, 7, 4, 6] [3, 5, 2, 8, 6, 4, 7, 1] [3, 5, 7, 1, 4, 2, 8, 6] [3, 5, 8, 4, 1, 7, 2, 6] [3, 6, 2, 5, 8, 1, 7, 4] [3, 6, 2, 7, 1, 4, 8, 5] [3, 6, 2, 7, 5, 1, 8, 4] [3, 6, 4, 1, 8, 5, 7, 2] [3, 6, 4, 2, 8, 5, 7, 1] [3, 6, 8, 1, 4, 7, 5, 2] [3, 6, 8, 1, 5, 7, 2, 4] [3, 6, 8, 2, 4, 1, 7, 5] [3, 7, 2, 8, 5, 1, 4, 6] [3, 7, 2, 8, 6, 4, 1, 5] [3, 8, 4, 7, 1, 6, 2, 5] [4, 1, 5, 8, 2, 7, 3, 6] [4, 1, 5, 8, 6, 3, 7, 2] [4, 2, 5, 8, 6, 1, 3, 7] [4, 2, 7, 3, 6, 8, 1, 5] [4, 2, 7, 3, 6, 8, 5, 1] [4, 2, 7, 5, 1, 8, 6, 3] [4, 2, 8, 5, 7, 1, 3, 6] [4, 2, 8, 6, 1, 3, 5, 7] [4, 6, 1, 5, 2, 8, 3, 7] [4, 6, 8, 2, 7, 1, 3, 5] [4, 6, 8, 3, 1, 7, 5, 2] [4, 7, 1, 8, 5, 2, 6, 3] [4, 7, 3, 8, 2, 5, 1, 6] [4, 7, 5, 2, 6, 1, 3, 8] [4, 7, 5, 3, 1, 6, 8, 2] [4, 8, 1, 3, 6, 2, 7, 5] [4, 8, 1, 5, 7, 2, 6, 3] [4, 8, 5, 3, 1, 7, 2, 6] [5, 1, 4, 6, 8, 2, 7, 3] [5, 1, 8, 4, 2, 7, 3, 6] [5, 1, 8, 6, 3, 7, 2, 4] [5, 2, 4, 6, 8, 3, 1, 7] [5, 2, 4, 7, 3, 8, 6, 1] [5, 2, 6, 1, 7, 4, 8, 3] [5, 2, 8, 1, 4, 7, 3, 6] [5, 3, 1, 6, 8, 2, 4, 7] [5, 3, 1, 7, 2, 8, 6, 4] [5, 3, 8, 4, 7, 1, 6, 2] [5, 7, 1, 3, 8, 6, 4, 2] [5, 7, 1, 4, 2, 8, 6, 3] [5, 7, 2, 4, 8, 1, 3, 6] [5, 7, 2, 6, 3, 1, 4, 8] [5, 7, 2, 6, 3, 1, 8, 4] [5, 7, 4, 1, 3, 8, 6, 2] [5, 8, 4, 1, 3, 6, 2, 7] [5, 8, 4, 1, 7, 2, 6, 3] [6, 1, 5, 2, 8, 3, 7, 4] [6, 2, 7, 1, 3, 5, 8, 4] [6, 2, 7, 1, 4, 8, 5, 3] [6, 3, 1, 7, 5, 8, 2, 4] [6, 3, 1, 8, 4, 2, 7, 5] [6, 3, 1, 8, 5, 2, 4, 7] [6, 3, 5, 7, 1, 4, 2, 8] [6, 3, 5, 8, 1, 4, 2, 7] [6, 3, 7, 2, 4, 8, 1, 5] [6, 3, 7, 2, 8, 5, 1, 4] [6, 3, 7, 4, 1, 8, 2, 5] [6, 4, 1, 5, 8, 2, 7, 3] [6, 4, 2, 8, 5, 7, 1, 3] [6, 4, 7, 1, 3, 5, 2, 8] [6, 4, 7, 1, 8, 2, 5, 3] [6, 8, 2, 4, 1, 7, 5, 3] [7, 1, 3, 8, 6, 4, 2, 5] [7, 2, 4, 1, 8, 5, 3, 6] [7, 2, 6, 3, 1, 4, 8, 5] [7, 3, 1, 6, 8, 5, 2, 4] [7, 3, 8, 2, 5, 1, 6, 4] [7, 4, 2, 5, 8, 1, 3, 6] [7, 4, 2, 8, 6, 1, 3, 5] [7, 5, 3, 1, 6, 8, 2, 4] [8, 2, 4, 1, 7, 5, 3, 6] [8, 2, 5, 3, 1, 7, 4, 6] [8, 3, 1, 6, 2, 5, 7, 4] [8, 4, 1, 3, 6, 2, 7, 5]