資料結構課程設計 八皇后問題

2021-08-01 23:55:29 字數 2051 閱讀 3548

資料結構課程設計

課題:八皇后問題

學院:電腦科學與資訊工程學院

專業:電腦科學與技術

年級:2010級計本二班

指導老師:徐章豔

組員:201012301059 尹佐斌

201012301064 黃文毅

201012301067 檀衛傑

201012301069 馬賑耀

八皇后問題

一. 八皇后問題簡述:

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

二. 解決思路:

先宣告我們根據條件可以知道皇后肯定是每行都有且只有乙個所以我們建立乙個陣列x[t]讓陣列角標表示八皇后的行,用這個角標對應的陣列值來確定這個皇后在這行的那一列。

我們用遞迴來做:

這問題要求皇后所在的位置必須和其他皇后的位置不在同一行、列還有把兩個皇后看成點其|斜率|=1;所以我們就要寫這個限定條件用乙個函式來實現:函式內對每乙個已經放好的皇后的位置進行判斷,所以就要有個迴圈。

我們既然是用遞迴來解決問題那就要把這個問題分成乙個個相同的小問題來實現。

不難發現我們要在8*8的方格裡放好8個皇后那我們就要知道在8(列)*7(行)是怎麼放的在有我們事先寫好的判斷函式放好最後行就搞定了;以此類推我們要知道8*7的怎麼方的我們就要知道8*6是怎麼樣的就好了,所以我們是以一行怎麼放作為乙個單元。

我們就去建乙個可以放好一行的函式backtrack(int t)裡面的t表示是第幾行,在main函式呼叫的時候第一次傳進來的是0也就是從第一行開始判斷。

我們就開始寫函式體了:

每一行有8個位置可以放,每乙個位置我們都要去判斷一下所以我們就用迴圈來搞定。

在這個迴圈裡面我們讓x[t]=i也就是從這一行的第乙個開始判斷。放好後就要去判斷是否符合條件。如果符合條件我們就在呼叫這個函式本身backtrack不過傳進去的引數是t+1也就是下一行的意思。

在進行判斷下一行之前我們要判斷一下t是不是等於8也就是已經是最後一行了,如果是最後一行了我們就可以將其進行輸出。列印8*8的矩陣(提示在寫乙個函式)皇后的位置用1表示出來沒有的用0表示。

三.組員工作分配:

尹佐斌: 演算法分析,**編寫,後期除錯

黃文毅: 資料查詢,**設計,**編寫

檀衛傑: 演算法分析,**編寫,後期除錯

馬賑耀: **設計,**編寫,後期除錯

四. **與註解:

#include

#include

#include

#include用getch()要呼叫的標頭檔案

#include 要用system函式要呼叫的標頭檔案

int sum=0統計有多少種可能

int shezhi設定為n皇后問題

int n;

printf("這是乙個n皇后問題...\n請輸入n=");

scanf("%d",&n);

return n;

}void print(int n,int x印出結果

sum列印一種情況統計一次

printf("\n");

}int judge(int k,int x判斷是否在同一直、橫、斜線上有其它棋子

void backtrack(int t,int n,int x把棋子放到棋盤上

}}void introduce()

void main()

}}}五.執行效果(截圖):

:五. 功能簡述:

1. 解決八皇后問題根本(遞迴法)

2. 可上公升為解決「n皇后問題」

3. 以直觀形式輸出棋局排布

4. 統計棋子排布方法總數

5. 清屏函式的呼叫

六. 心得體會

本次我們組做的是「八皇后問題」,這是乙個歷史經典問題,經過資料查詢,我們發現關於八皇后問題的演算法甚多,比如:回溯法,迭代法,遞迴法,殘卷法等。經組員討論,最後我們決定使用遞迴的方法解決該問題,分工合作。

雖然我們遇到了很多問題,但是經過資料查詢,和網上提問,我們最終解決了問題。

資料結構課程設計回溯法解決8皇后n皇后問題

資料結構課程設計 學院 資訊科學技術學院 專業 電子資訊工程 1 姓名 謝後樂 學號 20101601310015 n皇后問題 n皇后問題 在n n格的棋盤上放置彼此不受攻擊的n個皇后。按照西洋棋的規則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。n後問題等價於再n n的棋盤上放置n個皇后...

八皇后問題課程設計報告

課程設計題目 名稱 八皇后問題 內容 設計程式完成如下要求 在8 8的西洋棋棋盤上,放置8個皇后,使得這8個棋子不能互相被對方吃掉。要求 1 依次輸出各種成功的放置方法。2 最好能畫出棋盤的圖形形式,並在其上動態地標註行走的過程。3 程式能方便地移植到其他規格的棋盤上。一 問題分析和任務定義 八皇后...

資料結構課程設計

指導書山東建築大學 電腦科學與技術學院 二 六年十二月 課程設計基本情況 課程名稱 資料結構課程設計 相關課程 c語言程式設計 visual c 程式設計 資料結構 適合專業 電腦科學與技術 網路工程 軟體工程 設計週數 2周 學分 2學分 開課學期 第4學期 開課單位 電腦科學與技術學院 一 課程...