例項1 八皇后問題

2021-08-21 10:31:05 字數 736 閱讀 3827

八皇后問題,是乙個古老而著名的問題,是

回溯演算法

的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾於2023年提出:在8×8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。 

高斯認為有76種方案。2023年在柏林的象棋雜誌上不同的作者發表了40種不同的解,後來有人用圖論的方法解出92種結果。計算機發明後,有多種計算機語言可以解決此問題。下面就以python為例,解決這個問題:

def conflict(state, nextx):

nexty = len(state)

for i in range(nexty):

if abs(state[i]-nextx) in (0, nexty-i):

return true

return false

def queue(num=8,state=()):

for pos in range(num):

if not conflict(state,pos):

if len(state) == num-1:

yield pos

else:

for result in queue(num,state+(pos,)):

yield (pos,) + (result,)

八皇后問題1

include using namespace std define n 8 n代表皇后數 void queen int j int count 0 計算總共的解的數量 int column n 1 column m n 表示第m列,第n行放置了皇后,這裡下表並從0開始 int row n 1 ro...

回溯法1 八皇后問題

問題 8x8格的西洋棋上 擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。思路 回溯法是一種試錯方法 1.先選乙個位置試著放置一下,並做 記錄 2.在每次子問題中進行判定時需要過去的 記錄 作為是否可以繼續嘗試的依據 3.最後很關鍵,需要在每次判斷...

八皇后問題

八皇后問題 ackarlix 八皇后問題是乙個古老而著名的問題,是回溯演算法的典型例題。該問題是十九世紀著名的數學家高斯 1850 年提出 在 8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。高斯認為有 76種方案。1854 年在...