


下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、八皇后問題問題描述八皇后問題是一個古老而著名的問題,是回溯算法的典型例題。該問題是十九世紀著名的數(shù)學家高斯1850 年提出: 在 8× 8 格的國際象棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處于同一行、同一列或同一斜線上,問有多少種擺法。高斯認為有76種方案。 1854 年在柏林的象棋雜志上不同的作者發(fā)表了40 種不同的解,后來有人用圖論的方法解出92 種結果。問題分析所謂回溯就是走回頭路,該方法是在一定的約束條件下試探地搜索前進,若在前進中受阻,則回頭另擇通路繼續(xù)搜索。為了能夠沿著原路逆序回退,須用棧保存曾經到達的每一個狀態(tài), 棧頂?shù)臓顟B(tài)即為回退的第一站。因此回溯法
2、均可用棧來實現(xiàn)?,F(xiàn)在我們利用回溯算法求出其中一種解。其算法的基本思想如下:從第一行起逐行放置皇后,每放置一個皇后均要依次對第1,2,8 列進行試探,并盡可能取小的列數(shù)。若當前試探的列位置是安全的,即不與已放置的其他皇后沖突,則將該行的列位置保存在棧中,然后繼續(xù)在下一行上尋找安全位置;若當前試探的列位置不安全,則用下一列進行試探。當 8 列位置試探完畢都未找到安全位置時,就退?;厮莸缴弦恍校匦聦ο乱涣羞M行試探,直到找到問題的解。圖1 為八皇后問題的一種解。怎樣判斷一個位置是安全的為解決這個問題,我們對棋盤進行分析,將棋盤橫坐標定為i ,縱坐標定為j,i和 j 的取值范圍是從到。當某個皇后占了位
3、置(i,j)時,在這個位置的垂直方向、 水平方向和斜線方向都不能再放其它皇后了。用語句實現(xiàn), 可定義如下三個整型數(shù)組: a8,b15,c24。其中,各數(shù)組的代表的意義如下:程序實現(xiàn)程序清單如下:#include <>int a8,b15,c24;int sit8; /*記錄 8 個皇后所在列, 并且起到棧的作用*/void EightQueen(void)int i,j;i=1; /*從第一行開始,試探每個皇后的位置*/j=1; /*從第一列開始試探*/while (i<=8)while (j<=8)if (aj-1+bi+j-2+ci-j+7=3) /*在當前列上尋找
4、安全位置 */break;j+;if (j<=8) /*為第 i 個皇后找到了安全位置*/aj-1=0;bi+j-2=0;ci-j+7=0;/*皇后移入位置 (i,j)*/siti-1=j; /*相當于位置 (i,j)進棧 */i+; /*為下一個皇后尋找位置*/j=1;else /* 未找到安全位置 */i-;j=siti-1; /*出棧,回溯到上一行*/aj-1=1;bi+j-2=1;ci-j+7=1;/*移去位置 (i,j)上的皇后 */j=j+1; /*從下一列繼續(xù)探索 */for (i=1;i<=8;i+) /*輸出第 i 個皇后所在的列位置*/printf("
5、(%1d,%1d) ",i,siti-1);printf("n");int main(void)int i;for (i=0;i<=7;i+) ai=1;for (i=0;i<=14;i+) bi=1;for (i=0;i<=23;i+) ci=1;EightQueen();return 0;程序運行結果:(1,1) (2,5) (3,8) (4,6) (5,3) (6,7) (7,2) (8,4)上面的程序采用了非遞歸方法尋找八皇后問題的一種解,要找到八皇后問題的所有解,可通過修改函數(shù)EightQueen ,使其找到一個解后,程序并不終止,而是
6、打印輸出解的信息,然后退棧回溯,繼續(xù)尋求下一個解;一旦當前行是第1 行又仍需退?;厮輹r,算法終止。八皇后問題也可采用遞歸實現(xiàn), 下面的程序是采用遞歸方法求解八皇后問題的所有解的源程序。#include <>int a8,b15,c15,i;int sit8;void EightQueen(int i)int j;for (j=1;j<=8;j+)if (aj-1+bi+j-2+ci-j+7=3) /*如果第 i 列第 j 行為空 */aj-1=0;bi+j-2=0;ci-j+7=0;/*siti-1=j;if(i<8) EightQueen(i+1);else /*輸出一組解 */占用第i 列第j行 */for (int k=1;k<9;k+)printf("(%1d,%1d)printf("n");",k,sitk-1);aj-1=1;bi+j-2=1;ci-j+7=1;int main(void)for (i=0;i<=7;i+) ai=1;for (i=0;i<=14;i+) bi=1;for (i=0;i<=14;i+) ci=1;EightQueen(1);/*調用遞歸函數(shù) */return 0;1 表示第 j列上無皇后a j10 表示第 j列上有皇后1位置 (i , j )的對
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程建筑合同
- 房地產定向開發(fā)合同
- 杭州房屋買賣合同原件
- 食堂肉類采購合同
- 房屋居間委托合同
- 挖掘機產品銷售合同
- 辦公用品采購與供應服務合同書
- 貨物運輸合同進口
- 1《我們愛整潔》( 教學設計)2023-2024學年統(tǒng)編版道德與法治一年級下冊
- 山西師范大學《家具設計與制作》2023-2024學年第二學期期末試卷
- Unit1Lesson2HowDoWeLikeTeachers'Feedback-課件高中英語北師大版選擇性
- 香港(2024年-2025年小學二年級語文)人教版摸底考試試卷(含答案)
- 民法典物權編詳細解讀課件
- 《推力和拉力》課件
- 西師版小學數(shù)學二年級(下)表格式全冊教案
- 娛樂場所安全承諾聲明
- 2025屆廣東省廣州市番禺區(qū)數(shù)學高一下期末檢測試題含解析
- 2024年鎮(zhèn)江市高等專科學校單招職業(yè)適應性測試題庫完美版
- 2024年云上貴州大數(shù)據(集團)有限公司招聘筆試沖刺題(帶答案解析)
- 珠海市高級技工學校校企合作管理辦法修訂
- MOOC 量子信息原理與應用-南京大學 中國大學慕課答案
評論
0/150
提交評論