回溯法解決n後問題python代碼

回溯法解決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]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章