八皇后問題的兩種解法

2022-03-22 09:52:39 字數 1534 閱讀 7378

八皇后問題,是回溯演算法

的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾於2023年提出:在8x8格的西洋棋

上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。高斯認為有76種方案。2023年在柏林

的象棋雜誌上不同的作者發表了40種不同的解,後來有人用圖論的方法解出92種結果

八皇后問題往往還需要使用遞迴。

lz查詢到幾種不同的解決方案,現列出其中兩種並做了必要注釋,僅供參考。

第一種:

1 #include 2 #include 3

#define n 845

int column[n+1]; //

同欄是否有queen,1表示有

6int rup[2*n+1]; //

右上至左下是否有queen,1表示有

7int lup[2*n+1]; //

左上至右下是否有queen,1表示有

8int queen[n+1] = ;

9int num; //不同解的

編號10

11void

showanswer()

23else

2427

}28 printf("\n"

);29}30

}3132void backtrack(int i) //

遞迴求解

3340

else

4154}55

}56}57

58int main(void

)

第二種:

1 #include 2 #include 3

4#define queens 856

int icount = 0; //

記錄解的序號

7int site[queens]; //queen

在各行上的位置

8void queen(int n); //

遞迴求解

9void output(); //

輸出乙個解

10int isvalid(int n); //

判斷第n個queen放上去之後是否有衝突

1112

void

main()

1316

17void queen(int

n) 18

2526for(i = 1 ; i <= queens ; i++) //

n還沒到8,在第n行的各個行上依次試探

2733}34

35int isvalid(int n) //

判斷函式

36

46return

1; //

沒有衝突則返回147}

4849

void

output()

50

八皇后的兩種解法

public class eightqueue return true 遞迴解法 public int cal int i if x i 8 i 8 遞迴到了最後乙個地方 尋找到了合適位置,向下一列尋找位置 else if i 8 x i 8 else 非遞迴解法 public int calcul...

python八皇后問題2種解法

八皇后問題 思路 確保每乙個皇后的左上角 右上角或正上方沒有皇后,用這個規則遞迴地每一行,再每一列迴圈過去,每一列或每一行只有乙個元素 from tkinter import from pil import image,imagetk size 8class eightqueen def init ...

八皇后問題的兩種解決方法

最近看到遞迴,原本利用回溯思想解決的經典八皇后問題,其實也是可以用遞迴解決的 八皇后的遞迴解決思路 從第一行開始,依次判斷0 8列的哪一列可以放置queen,這樣就確定了該行的queen的位置,然後行數遞增,繼而遞迴實現下一行的判斷,依次類推直到行數增加到8 行數從0開始的 此時為遞迴 歸的條件,即...