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