第6周 專案6 求解8皇后問題的程式

2021-07-23 11:40:12 字數 1020 閱讀 5424

八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾於2023年提出:在8×8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。 高斯認為有76種方案。2023年在柏林的象棋雜誌上不同的作者發表了40種不同的解,後來有人用圖論的方法解出92種結果。計算機發明後,有多種計算機語言可以解決此問題

基本實現**:

#include

#include

#include

void nqueens(int *x, int n);     /*求解n皇后問題*/

int place(int *x, int k);         /*判斷是否可以在第k行第x[k]列擺放皇后*/

void printsolution(int *x, int n);  /*輸出求解結果*/

int main()

/*如果乙個皇后能放在第k行第x[k]列,則返回真(1),否則返回假(0)*/

int place(int *x, int k)

}else  /*對應x[k]>n的情形,這一行已經沒有再試的必要,回溯到上一行*/

k--;  /*上一行在原第x[k]列的下1列開始考察*/}}

/*輸出求解結果*/

void printsolution(int *x, int n)

printf("\n");

}printf("\n");

}執行截圖:

知識點總結:

用回溯法求解的過程後,將關注如何基於(x[1], x[2], ….. x[n])形式的解結構,寫出讓計算機快速完成求解過程的**。

心得體會:

感受到計算機解法的快速有效性,以及對n皇后問題有了了解認識。

第11周專案6素數

問題及 檔名稱 isprime.cpp 作 者 單昕昕 完成日期 2014年11月10日 版 本 號 v1.0 問題描述 編制乙個返回值為bool型的函式isprimer 用於判斷引數是否為素數 是素數返回true,否則false 自編main函式用於測試。程式輸出 判斷該數是否為素數。includ...

第6周專案6 複製模板類 1

檔名稱 main.cpp 完成日期 2015年 4月19日 版本號 v1.0 問題描述 閱讀教材例10.1。該例實現了乙個複數類,但是美中不足的是,複數類的實部和虛部都固定只能是double型的。可以通過模板類的技術手段,設計complex,使實部和虛部的型別為定義物件時指定的實際型別。1 要求類成...

第11周專案6反序數

問題及 檔名稱 reverse.cpp 作 者 單昕昕 完成日期 2014年11月10日 版 本 號 v1.0 問題描述 編制乙個函式reverse,返回給定資料的 反序數 例如輸入1234,輸出4321。請編制 reverse函式,在下面 的基礎上補充相關的部分,實現要求的功能。程式輸出 反序數。...