演算法實驗報告3——N皇后——2020.12.17
阿新 • • 發佈:2020-12-19
技術標籤:python演算法-每日一練演算法python佇列資料結構字串
演算法實驗報告3——N皇后
一丶N皇后問題
N皇后基礎題(輸入N,輸出所有結果):
在一個n*n的國際象棋棋盤上放置n個皇后,使得它們中任意2個之間都不互相“攻擊”,即任意2個皇后不可在同行、同列、同斜線上。
輸入N,⑴求N皇后問題的一種放法; ⑵求N皇后問題的所有放法
二丶試題程式碼
# coding=gbk
__author__ = 'Blockchain_Key'
__time__ = '2020.12.17'
# 檢測(x,y)這個位置是否合法(不會被其他皇后攻擊到)
def is_attack(queue, x, y):
for i in range(x):
if queue[i] == y or abs(x - i) == abs(queue[i] - y):
return True
return False
# 按列來擺放皇后
def put_position(n, queue, col):
for i in range(n):
if not is_attack(queue, col, i):
queue[col] = i
if col == n - 1: # 此時最後一個皇后擺放好了,列印結果。
print(queue)
else:
put_position(n, queue, col + 1)
if __name__ == "__main__":
n = int(input()) # n個皇后
queue = [None for i in range(n)] # 儲存皇后位置的一維陣列,陣列下標表示皇后所在的列,下標對應的值為皇后所在的行。
put_position( n, queue, 0)