馬踏棋盤報告_第1頁
馬踏棋盤報告_第2頁
馬踏棋盤報告_第3頁
馬踏棋盤報告_第4頁
馬踏棋盤報告_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

本文格式為Word版,下載可任意編輯——馬踏棋盤報告馬踏棋盤試驗報告

張冰22920232203923

一、試驗目的

(1)、理解棧的特性“后進先出〞。(2)、僅僅認識到棧和隊列是兩種特別的線性表是遠遠不夠的,本次試驗的目的在于更深入的了解棧和隊列的特性,以便在實際問題背景下靈活運用他們。

(3)、在了解他特性的基礎上,還將穩(wěn)定對這種結構的構造方法的理解。

二、試驗內(nèi)容

(1)、要求:在國際象棋8×8棋盤上面,依照國際象棋規(guī)則中馬的行進規(guī)則,實現(xiàn)從任意初始位置,每個方格只進入一次,走遍棋盤上全部64個方格。編制程序,求出馬的行走路線,并按求出的行走路線,將數(shù)字1,2,?,64依次填入一個8×8的方陣,并輸出它的行走路線(棋盤如下圖)。

(2)、輸入:任意一個起始位置;

輸出:無重復踏遍棋盤的結果,以數(shù)字1-64表示行走路線。

01234567

(3)、數(shù)據(jù)結構要求:采用順序棧實現(xiàn)。

01762853H41452367三、試驗步驟

為了實現(xiàn)上述程序功能,可以采用順序?;蛘哝湕泶鎯λ臄?shù)據(jù),本試驗所需要的存儲空間不是很大,不需動態(tài)的開拓好多空間,所以采用相對簡單的順序棧來存儲數(shù)據(jù),既便利有簡單。

(一)、概要設計

(1)、順序棧的抽象數(shù)據(jù)類型定義:ADTStack{

數(shù)據(jù)對象:D={ai|ai∈(0,1,?,9),i=0,1,2,?,n,n≥0}數(shù)據(jù)關系:R={|ai-1,ai∈D,i=1,2,?,n}}ADTStack

(2)本程序包含三個模塊:

1、主程序模塊:voidmain(){

定義變量;接受命令;處理命令;退出;}

2、起始坐標函數(shù)模塊——馬兒在棋盤上的起始位置;

3、探尋路徑函數(shù)模塊——馬兒每個方向進行嘗試,直到試完整個棋盤;4、輸出路徑函數(shù)模塊——輸出馬兒行走的路徑;

(二)、詳細設計

(1)、定義頭文件和預定義#include#defineMAXSIZE100#defineN8(2)、數(shù)據(jù)類型定義

intboard[8][8];//定義棋盤intHtry1[8]={1,-1,-2,2,2,1,-1,-2};

/*存儲馬各個出口位置相對當前位置行下標的增量數(shù)組*/

intHtry2[8]={2,-2,1,1,-1,-2,2,-1};

/*存儲馬各個出口位置相對當前位置列下標的增量數(shù)組*/

structStack{//定義棧類型inti;//行坐標intj;//列坐標intdirector;//存儲方向

}stack[MAXSIZE];//定義一個棧數(shù)組inttop=-1;//棧指針

(3)、函數(shù)聲明

voidInitLocation(intxi,intyi);//馬兒在棋盤上的起始位置坐標

intTryPath(inti,intj);//馬兒每個方向進行嘗試,直到試完整個棋盤

voidDisplay();//輸出馬兒行走的路徑

(4)、起始坐標函數(shù)模塊

voidInitLocation(intxi,intyi){

intx,y;//定義棋盤的橫縱坐標變量top++;//棧指針指向第一個棧首stack[top].i=xi;//將起始位置的橫坐標進棧stack[top].j=yi;//將起始位置的縱坐標進棧stack[top].director=-1;//將起始位置的嘗試方向賦初值board[xi][yi]=top+1;//標記棋盤

x=stack[top].i;//將起始位置的橫坐標賦給棋盤的橫坐標y=stack[top].j;//將起始位置的縱坐標賦給棋盤的縱坐標

if(TryPath(x,y))//調用馬兒探尋函數(shù),假使馬兒探尋整個棋盤返回1否則返回0

Display();//輸出馬兒的行走路徑else

printf(\無解\}

(5)、探尋路徑函數(shù)模塊intTryPath(inti,intj){

intfind,director,number,min;//定義幾個臨時變量inti1,j1,h,k,s;//定義幾個臨時變量inta[8],b1[8],b2[8],d[8];//定義幾個臨時數(shù)組while(top>-1)//棧不空時循環(huán){

for(h=0;ha[k]){

min=a[k];

d[h]=k;//將下表存入數(shù)組d[8]中s=k;}

a[s]=9;}

director=stack[top].director;

if(top>=63)//假使走完整個棋盤返回1return(1);

find=0;//表示沒有找到下一個位置for(h=director+1;h=1printf(\}

printf(\InitLocation(x-1,y-1);//調用起始坐標函數(shù)}

四、調試分析

(1)、本次試驗的主要目的是在于把握和理解棧的特性和它的應用。在編制該程序中遇到了好多問題。首先,在開始剛編制程序的時候遇到的問題是,程序編譯都通不過,主要在一些細節(jié)的問題上,還有在程序的返回值在剛開始時也沒有正確返回。經(jīng)過編譯漸漸調試,

編譯都能通過,沒有錯誤和警告。

(2)、雖然編譯都能通過,但是運行時卻出錯,程序不能終止,只有通過人工方式終止程序,可能是在某些地方出現(xiàn)了無限死循環(huán)了,然后在細心檢查代碼,發(fā)現(xiàn)沒有標記馬兒嘗試的方向director,這樣的話,馬兒回溯的時候,下一次又有可能走那個方向,這樣就出現(xiàn)了死循環(huán)。

(3)、標記好馬兒嘗試的方向后,編譯運行,但是運行結果卻不符合程序所要求的結果,說明在算法上確定有錯誤,檢查發(fā)現(xiàn),馬兒走的坐標沒有控制后,它的橫縱坐標必需控制0到7之間,否則的話馬兒就會踏出棋盤以外,這樣輸出的結果就不對。還有就是棋盤走過的位置要標記一下,以便下次走不重復走,當回溯的時候的記得把標記給清掉,這個地方有時候也很簡單混淆。

五、運行結果

六、試驗體會

通過本次試驗的編寫,能夠把握棧的性質以及它的應用。這次試驗花了好多時間才完成,其實本應當早完成的,在檢查的過程中有多多少少修改完美了一下,不過算法思想?yún)s沒有改變。這個程序也讓我頭疼了幾次,就是運行速度很慢,要等很久才能輸出結果,這樣的話很占內(nèi)存資源,而且CPU的使用記錄也很高,主要是它需要的運算太多,所以CPU使用記錄也是很高的。雖然我也參考了一些優(yōu)化的算法,可以找到最優(yōu)路進走,但是這些最優(yōu)算法都和棧的應用失去了聯(lián)系,本次的試驗主要目的就是要了解棧,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論