資源描述:
《數(shù)據(jù)結構課程設計-八皇后的問題求解》由會員上傳分享,免費在線閱讀,更多相關內容在工程資料-天天文庫。
1、《數(shù)據(jù)結構》課程設計題目八皇后的問題求解學生姓名指導教師學院信息學院專業(yè)班級信科一班完成時間2014年1月2日第一章課程設計目的本學期我們對《數(shù)據(jù)結構》這門課程進行了學習。這門課程是一門實踐性非常強的課程,為了讓大家更好地理解與運用所學知識,提高動手能力,我們進行了此次課程設計實習。這次課程設計不但要求實習者掌握《數(shù)據(jù)結構》中的各方面知識,還要求實習者具備一定的語言基礎和編程能力。具體說來,這次課程設計主要有兩大方面目的。一是讓實習著通過學習掌握《數(shù)據(jù)結構》中的知識。對于遞歸算法這一課題來說,所要求掌
2、握的數(shù)據(jù)結構知識主要有:if語句的選擇結構,for語句的循環(huán)結構,函數(shù)的調用來實現(xiàn)。二是二是通過實習鞏固并提高實習者的C語言知識,并初步了解VisualC++的知識,提高其編程能力與專業(yè)水平。第二章課程設計內容和要求2.1課程設計內容組成員名稱和分工在一個8×8的棋盤里放置8個皇后,要求每個皇后兩兩之間不相"沖"(在每一橫列豎列斜列只有一個皇后)并要求用遞歸算法實現(xiàn),輸出所有棋盤狀態(tài),其中空的地方為“*”,放置皇后的地方為“@”2.1.1八皇后的建立與輸出對給定的8×8的棋盤里的八個皇后進行討論,根據(jù)
3、遞歸法,循環(huán)結構和選擇結構進行建立并輸出之。2.2運行環(huán)境該程序的運行環(huán)境為Windows7系統(tǒng),MicrosoftVisualC++6.0版本。第三章課程設計分析3.1數(shù)據(jù)類型規(guī)定了函數(shù)返回值類型。黨執(zhí)行函數(shù)體中的語句后,通常會產生一個結果,這就是函數(shù)的返回值,它可以是任何有效的類型。若函數(shù)執(zhí)行后不返回值,數(shù)據(jù)類型習慣用void來表示。如果在函數(shù)定義時沒有數(shù)據(jù)類型出現(xiàn),則默認為函數(shù)返回值為整型值(int)。3.2函數(shù)調用調用一個函數(shù)之前必須對該函數(shù)進行說明。函數(shù)調用由函數(shù)名和函數(shù)調用運算符()組成,
4、()內有0個或多個逗號分隔的參數(shù)(稱為實參)。每一個參數(shù)是一個表達式,且參數(shù)的個數(shù)與參數(shù)的類型要與被調函數(shù)定義的參數(shù)(稱為形參)個數(shù)和類型匹配。當被調函數(shù)執(zhí)行時,首先計算實參表達式,并將結果值傳送給行參,然后執(zhí)行函數(shù)體,返回的返回值被傳送到調用函數(shù)。如果函數(shù)調用后有返回值,調用表達是可以用在表達式中,而無參函數(shù)的調用是一個單獨的語句。3.3選擇結構if語句的基本形式可分為兩種:(1)if(表達式)語句其執(zhí)行過程是,首先計算表達式的值,若不為0,條件判斷為真,則執(zhí)行()后面的語句,否則,if語句中止執(zhí)行
5、,即不執(zhí)行()后面的語句。(2)if(表達式)語句1else語句2其執(zhí)行過程是,首先計算表達式的值,若不為0,條件判斷為真,則執(zhí)行()后面的語句,否則執(zhí)行語句2。3.4循環(huán)結構for語句的一般形式:for(表達式1;表達式2;表達式3){語句;//循環(huán)體}其執(zhí)行的過程有以下幾個步驟:求解表達式1;求解表達式2,若其值為真,則執(zhí)行for語句中指定的循環(huán)體語句,然后執(zhí)行下面的第3)步。若為假,則結束循環(huán);求解表達式3;轉回上面第2)步繼續(xù)執(zhí)行;循環(huán)結束,執(zhí)行for語句后面的其他語句。第四章算法(數(shù)據(jù)結構)
6、描述4.1.1八皇后的存儲結構定義其列數(shù),行數(shù),主對角線,從對角線,算法的種類數(shù),staticcharQueen[8][8];staticinta[8];//列數(shù)staticintb[15];//代表主對角線staticintc[15];代表從對角線staticintiQueenNum=0;//記錄總的棋盤狀態(tài)數(shù)voidqu(inti);//參數(shù)i代表行4.1.2初始化棋盤在確定其中八皇后棋盤中的位置時,應該初始化一個棋盤,然后再輸入數(shù)據(jù)intmain(){intiLine,iColumn;//棋盤初
7、始化,空格為*,放置皇后的地方為@for(iLine=0;iLine<8;iLine++){a[iLine]=0;//列標記初始化,表示無列沖突for(iColumn=0;iColumn<8;iColumn++)Queen[iLine][iColumn]='*';}//主、從對角線標記初始化,表示沒有沖突for(iLine=0;iLine<15;iLine++)b[iLine]=c[iLine]=0;qu(0);return0;}4.1.3建立并輸出棋盤數(shù)組a、b、c分別用來標記沖突,a數(shù)組代表列沖突
8、,從a[0]~a[7]代表第0列到第7列,如果某列上已經(jīng)有皇后,則為1,否則為0;數(shù)組b代表主對角線沖突,為b[i-j+7],即從b[0]~b[14],如果某條主對角線上已經(jīng)有皇后,則為1,否則為0;數(shù)組c代表從對角線沖突,為c[i+j],即從c[0]~c[14],如果某條從對角線上已經(jīng)有皇后,則為1,否則為0;voidqu(inti){intiColumn;for(iColumn=0;iColumn<8;iColumn++){if(a[iColumn]