八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾於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函式,在下面 的基礎上補充相關的部分,實現要求的功能。程式輸出 反序數。...