版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計報告</p><p> 完成日期:2012-6</p><p> 目 錄</p><p> 1課程設(shè)計的目的3</p><p> 1.1課程設(shè)計的目的:3</p><p> 1.2課程設(shè)計的題目:走迷宮游戲3</p><p>
2、; 1.3題目要求:3</p><p> 2課程設(shè)計的實驗報告內(nèi)容:4</p><p> 3課程設(shè)計的原程序代碼:4</p><p><b> 4運(yùn)行結(jié)果:16</b></p><p> 5. 課程設(shè)計總結(jié)21</p><p><b> 6參考書目:22</
3、b></p><p> 1 課程設(shè)計的目的</p><p> 1.1 課程設(shè)計的目的</p><p> 數(shù)據(jù)結(jié)構(gòu)是實踐性很強(qiáng)的課程。課程設(shè)計是加強(qiáng)我們實踐能力的一個強(qiáng)有力手段。在完成程序設(shè)計的同時能夠?qū)懗霰容^規(guī)范的設(shè)計報告,這樣對于我們對基本程序設(shè)計素養(yǎng)的培養(yǎng)和軟件工作者工作作風(fēng)的訓(xùn)練,將起到顯著的促進(jìn)作用。</p><p>
4、 1.2 課程設(shè)計的題目</p><p><b> 走迷宮游戲</b></p><p><b> 1.3 題目要求</b></p><p> 老鼠形象可辨認(rèn),可用鍵盤操縱老鼠上下左右移動;</p><p> 迷宮的墻足夠結(jié)實,老鼠不能穿墻而過;</p><p>
5、 正確檢測結(jié)果,若老鼠在規(guī)定時間內(nèi)走到糧倉處,提示成功,否則提示失??;</p><p> 添加編輯迷宮功能,可修改當(dāng)前迷宮,修改內(nèi)容:墻變路、路變墻;</p><p> 找出走出迷宮的所有路徑,以及最短路徑。</p><p><b> 2 概要設(shè)計</b></p><p><b> 2.1 存儲結(jié)
6、構(gòu)</b></p><p> 基本抽象數(shù)據(jù)類型:建立堆棧存儲結(jié)構(gòu)</p><p> Struct step</p><p><b> {</b></p><p> int x,y,n; //整形(注:基本數(shù)據(jù)類型,步子行、列坐標(biāo)、行走步數(shù))</p><p><b>
7、 }</b></p><p> Char **maze //字符數(shù)組(注:定義一個動態(tài)空間迷宮)</p><p> Int hang,lie; //整型(注:輸入迷宮的行、列數(shù))</p><p> Int s; //整型(注:用于控制是否重新進(jìn)入運(yùn)行程序)</p><p><b> 2.2 基本操作<
8、;/b></p><p> 1)改變迷宮形狀模塊:</p><p> Void change(char **maze,int hang,int lie)</p><p> //輸入迷宮地圖,輸出形狀改變后迷宮。</p><p><b> 2)單步輸出模塊</b></p><p>
9、void step_to_step (char **maze,step *step,int hang,int lie,int n) </p><p> //輸入迷宮地圖,輸出單步行走步法。</p><p><b> 3)輸出路徑模塊</b></p><p> void out (char **maze,int hang,int lie,i
10、nt i,int j)</p><p> //輸入迷宮地圖,整體輸出行走路徑。</p><p> 4)判斷行走路徑模塊</p><p> void cure (char **maze,int hang,int lie)</p><p> //輸入迷宮地圖,輸出每一步行走步法。</p><p><b>
11、 5)主程序模塊</b></p><p> int main() </p><p><b> 3 詳細(xì)設(shè)計</b></p><p><b> 3.1 流程圖</b></p><p><b> 主程序流程圖</b></p><p>
12、;<b> 系統(tǒng)結(jié)構(gòu)圖</b></p><p><b> 子流程圖</b></p><p> 1) 改變迷宮形狀模塊</p><p> 單步輸出路徑模塊:</p><p> 3) 輸出整體路徑模塊:</p><p> 3) 判斷每一步行走路徑模塊:<
13、/p><p><b> 3.2 源程序</b></p><p> #include <iostream> </p><p> #include <conio.h> </p><p> using namespace std; </p><p> struct ste
14、p //定義一個棧 </p><p><b> { </b></p><p> int x,y,n; //x,y表示步子坐標(biāo),n表示步數(shù) </p><p><b> }; </b></p><p> void change(char **
15、maze,int hang,int lie) </p><p> //改變迷宮的樣子,便于觀察單步行走過程 </p><p><b> { </b></p><p> for(int i=0;i<hang+2;i++) </p><p><b> { </b></p>
16、<p> for(int j=0;j<lie+2;j++) </p><p> switch(maze[i][j]) </p><p><b> { </b></p><p> case '1': maze[i][j]='#';break; </p><p>
17、 case '+': </p><p> case '0': </p><p> case '.': maze[i][j]=' ';break; </p><p><b> } </b></p><p><b> }</b>
18、</p><p><b> } </b></p><p> void step_to_step(char **maze,step *Step,int hang,int </p><p> lie,int n) </p><p> { //單步輸出 </p&
19、gt;<p> for(int k=0;k<=n;k++) //k為步數(shù) </p><p><b> { </b></p><p> for(int i=0;i<hang+2;i++) </p><p><b> { </b></p><p> for(i
20、nt j=0;j<lie+2;j++) </p><p><b> { </b></p><p> if(Step[k].x==i&&Step[k].y==j)//找出走過每一步的坐標(biāo) </p><p> cout<<"."<<" "; </p&g
21、t;<p> else cout<<maze[i][j]<<" "; </p><p><b> } </b></p><p> cout<<endl; </p><p><b> } </b></p><p> cou
22、t<<"這是第"<<k+1<<"步"<<endl<<endl; </p><p> getch(); //顯示程序運(yùn)行結(jié)果 </p><p><b> } </b></p><p><b> } </b><
23、;/p><p> void out(char **maze,int hang,int lie,int i,int j) //輸出所走的路程 </p><p> { </p><p> if(i==1&&j==1) //若回到原點則表明無出路 &
24、lt;/p><p><b> { </b></p><p> cout<<endl; </p><p> cout<<"*************************************************"<<endl; </p><p> cou
25、t<<"|-------------此迷宮沒有出路,所走路線如下圖---------------|"<<endl; </p><p> cout<<"************************************************************"<<endl; </p><p&g
26、t;<b> } </b></p><p> else //否則有出路 </p><p><b> { </b></p><p> cout<<endl;</p><p> cout<<"*****
27、*******************************************************"<<endl; </p><p> cout<<"|----------------找到迷宮出路,如圖所示--------------------|"<<endl; </p><p> cout<<
28、"************************************************************"<<endl; </p><p><b> } </b></p><p> for(i=0;i<hang+2;i++) //輸出步子 </p><p&g
29、t;<b> { </b></p><p> for(j=0;j<lie+2;j++) </p><p> cout<<maze[i][j]<<" "; </p><p> cout<<endl; </p><p><b> } <
30、;/b></p><p><b> } </b></p><p> void cure(char **maze,int hang,int lie) </p><p> //判斷每一步行走步法 </p><p><b> { </b></p><p> i
31、nt i=1,j=0,n=-1; </p><p><b> char Q; </b></p><p> step *Step; //定義一個存儲路程的棧 </p><p> Step=new step [hang*lie]; //事先給其分配一定的空間,[hang*lie]表示空
32、間足夠 </p><p> while(maze[hang][lie]!='.') //由右、下、左、上的順序判斷是否走通 </p><p> { </p><p> //'1'表示走不通,'+'表示已經(jīng)走過但不通又回來的步子,'.'表示已經(jīng)走過并
33、通了的步子 </p><p> if(maze[i][j+1]!='1'&&maze[i][j+1]!='.'&&maze[i][j+1]!='+') //判斷向右是否可走 </p><p><b> { </b></p><p> if(i==1&
34、&j==0) </p><p><b> { </b></p><p> cout<<"老鼠"<<endl; </p><p><b> } </b></p><p><b> else </b></p>
35、<p> cout<<"右"<<endl; </p><p> maze[i][j+1]='.'; </p><p><b> j=j+1; </b></p><p><b> n++; </b></p><p> S
36、tep[n].x=i; </p><p> Step[n].y=j; //第n步的坐標(biāo) </p><p> cout<<i<<","<<j; </p><p><b> } else </b></p><p> if(maze[i+1][j]!='
37、1'&&maze[i+1][j]!='.'&&maze[i+1][j]!='+') //判斷向下 </p><p><b> { </b></p><p> cout<<"下"<<endl; </p><p> maze[
38、i+1][j]='.'; </p><p><b> i=i+1; </b></p><p><b> n++; </b></p><p> Step[n].x=i; </p><p> Step[n].y=j; </p><p> cout<
39、<i<<","<<j; </p><p><b> } </b></p><p><b> else </b></p><p> if(maze[i][j-1]!='1'&&maze[i][j-1]!='.'&&
40、amp;maze[i][j-1]!='+') </p><p><b> { </b></p><p> cout<<"左"<<endl; </p><p> maze[i][j-1]='.'; </p><p><b> j
41、=j-1; </b></p><p><b> n++; </b></p><p> Step[n].x=i; </p><p> Step[n].y=j; </p><p> cout<<i<<","<<j; </p><p
42、><b> } </b></p><p><b> else </b></p><p> if(maze[i-1][j]!='1'&&maze[i-1][j]!='.'&&maze[i-1][j]!='+') //判斷向上 </p><
43、;p><b> { </b></p><p> cout<<"上"<<endl; </p><p> maze[i-1][j]='.'; </p><p><b> i=i-1; </b></p><p><b>
44、 n++; </b></p><p> Step[n].x=i; </p><p> Step[n].y=j; </p><p> cout<<i<<","<<j; </p><p><b> } </b></p><p>
45、; else //若走不通則返回上一步 </p><p><b> { </b></p><p> if(i==1&&j==1) //當(dāng)回到入口時,說明無通路,結(jié)束循環(huán) </p><p><b> break; </b><
46、/p><p><b> else </b></p><p><b> { </b></p><p> maze[i][j]='+'; //將走不通的點置為+ </p><p><b> n--; </b></p><
47、p> i=Step[n].x; //返回上一個點 </p><p> j=Step[n].y; </p><p> cout<<"返回"<<endl<<i<<","<<j; //輸出返回信息 </p><p> }
48、 </p><p><b> } </b></p><p> if(i==hang&&j==lie) //到達(dá)糧倉 </p><p> cout<<"(出口)"<<" "<<&qu
49、ot;(共"<<n+1<<"步"<<")"; </p><p><b> } </b></p><p> out(maze,hang,lie,i,j); </p><p> cout<<endl<<endl<<endl
50、; </p><p> cout<<"是否想知道老鼠每一步是如何走的(y/n):"; </p><p><b> cin>>Q; </b></p><p> cout<<endl<<endl; </p><p> if(Q=='y'
51、;) </p><p><b> { </b></p><p> change(maze,hang,lie); </p><p> step_to_step(maze,Step,hang,lie,n); </p><p><b> } </b></p><p><
52、;b> } </b></p><p> int main() </p><p><b> {</b></p><p> char **maze; //定義一個迷宮,空間可動態(tài) </p><p> int s=1, hang,lie,i,j; </p>&l
53、t;p><b> int Q; </b></p><p> cout<<"歡迎來到走迷宮游戲: "<<endl; </p><p> cout<<"想開始嗎?按1游戲開始"<<endl; </p><p><b> cin>&g
54、t;Q; </b></p><p> cout<<endl<<endl; </p><p><b> if(Q==1) </b></p><p><b> { </b></p><p> cout<<"請輸入迷宮的行列"&l
55、t;<endl; </p><p> cout<<"行數(shù):"; </p><p> cin>>hang; </p><p> cout<<"列數(shù):"; </p><p> cin>>lie; </p><p> co
56、ut<<endl; </p><p> maze=new char *[hang+2]; //分配連續(xù)空間給迷宮 </p><p> for(i=0;i<hang+2;i++) </p><p> maze[i]=new char [lie+2]; </p><p> cout<<"請輸入
57、迷宮,0表示通路,1表示墻"<<endl; </p><p> for(i=1;i<=hang;i++) </p><p> for(j=1;j<=lie;j++) </p><p> cin>>maze[i][j]; </p><p><
58、;b> } </b></p><p> if(maze[1][1]=='1') //入口是墻 </p><p><b> { </b></p><p> cout<<"入口是墻,老鼠進(jìn)不去!!!"<<endl<<endl; </p>
59、;<p> cout<<"請重新輸入!!!"<<endl<<endl; </p><p> for(i=1;i<=hang;i++) </p><p> for(j=1;j<=lie;j++) </p><p> cin>>maze[i][j]; </p&
60、gt;<p><b> } </b></p><p> for(i=0;i<hang+2;i++) maze[i][0]='1'; </p><p> for(i=0;i<lie+2;i++) maze[0][i]='1'; </p><p> for(i=0;i<lie+
61、2;i++) maze[hang+1][i]='1'; </p><p> for(i=0;i<hang+2;i++) maze[i][lie+1]='1'; //給迷宮外圍加圍墻 </p><p> cout<<endl<<endl; </p><p> cout<<"**
62、******************您輸入的迷宮為 ******************************"<<endl; </p><p> cout<<"行數(shù):"<<hang<<" "<<"列數(shù):"<<lie; </p><p> c
63、out<<" "<<"老鼠所在位置:"<<"1,1"<<" "<<"糧倉所在位置:"<<hang<<","<<lie<<endl; </p><p> for(i=0;i<h
64、ang+2;i++) </p><p><b> { </b></p><p> for(j=0;j<lie+2;j++) </p><p> cout<<maze[i][j]<<" "; </p><p> cout<<endl; </p>
65、;<p><b> } </b></p><p> cout<<endl<<endl<<"老鼠所走的步驟如下:"<<endl; </p><p> cure(maze,hang,lie); </p><p> cout<<endl<<
66、;endl<<endl; </p><p><b> getch(); </b></p><p> cout<<"你猜對了嗎?"<<endl; </p><p> cout<<"你還想玩嗎?1:yes 2:no"<<endl; </
67、p><p><b> cin>>s; </b></p><p><b> if(s=1) </b></p><p><b> { </b></p><p> cout<<"想開始嗎?按1游戲開始"<<endl; <
68、;/p><p><b> cin>>Q; </b></p><p> cout<<endl<<endl; </p><p><b> if(Q==1) </b></p><p><b> { </b></p><p&g
69、t; cout<<"請輸入迷宮的行列"<<endl; </p><p> cout<<"行數(shù):"; </p><p> cin>>hang; </p><p> cout<<"列數(shù):"; </p><p> cin
70、>>lie; </p><p> cout<<endl; </p><p> maze=new char *[hang+2]; //分配連續(xù)空間給迷宮 </p><p> for(i=0;i<hang+2;i++) </p><p> maze[i]=new char [lie+2]; </
71、p><p> cout<<"請輸入迷宮,0表示通路,1表示墻"<<endl; </p><p> for(i=1;i<=hang;i++) </p><p> for(j=1;j<=lie;j++) </p><p> cin>>maze[i][j];
72、 </p><p><b> } </b></p><p> if(maze[1][1]=='1') </p><p><b> { </b></p><p> cout<<"入口是墻,老鼠進(jìn)不去!!!"<&l
73、t;endl<<endl; </p><p> cout<<"請重新輸入!!!"<<endl<<endl; </p><p> for(i=1;i<=hang;i++) </p><p> for(j=1;j<=lie;j++) </p><p> cin
74、>>maze[i][j]; </p><p><b> } </b></p><p> for(i=0;i<hang+2;i++) maze[i][0]='1'; </p><p> for(i=0;i<lie+2;i++) maze[0][i]='1'; </p>
75、<p> for(i=0;i<lie+2;i++) maze[hang+1][i]='1'; </p><p> for(i=0;i<hang+2;i++) maze[i][lie+1]='1'; </p><p> cout<<endl<<endl; </p><p> cou
76、t<<"********************您輸入的迷宮為******************************"<<endl; </p><p> cout<<"行數(shù):"<<hang<<" "<<"列數(shù):"<<lie; </p&g
77、t;<p> cout<<" "<<"老鼠所在位置:"<<"1,1"<<" "<<"糧倉所在位 置:"<<hang<<","<<lie<<endl; </p><p>
78、; for(i=0;i<hang+2;i++) </p><p><b> { </b></p><p> for(j=0;j<lie+2;j++) </p><p> cout<<maze[i][j]<<" "; </p><p> cout<&l
79、t;endl; </p><p><b> } </b></p><p> cout<<endl<<endl<<"老鼠所走的步驟如下:"<<endl; </p><p> cure(maze,hang,lie); </p><p> co
80、ut<<endl<<endl<<endl; </p><p><b> getch(); </b></p><p> cout<<"你還想玩嗎?1:yes 2:no"<<endl; </p><p><b> cin>>s;</b
81、></p><p><b> } </b></p><p><b> else </b></p><p> cout<<"走迷宮游戲結(jié)束! "<<endl; </p><p> return 0; </p><p>&
82、lt;b> } </b></p><p><b> 4 測試</b></p><p> 1)進(jìn)入“走迷宮游戲”</p><p> 2)第一次測試,輸入迷宮行列數(shù)和一個無通路迷宮,運(yùn)行結(jié)果如下:</p><p> 3)第二次測試,輸入有通路迷宮,運(yùn)行結(jié)果如下:</p><
83、p> 4)選擇單步運(yùn)行,運(yùn)行結(jié)果如下:</p><p><b> 5 課程設(shè)計總結(jié)</b></p><p> 數(shù)據(jù)結(jié)構(gòu)”是計算機(jī)科學(xué)與技術(shù)專業(yè)一門十分重要的專業(yè)技術(shù)基礎(chǔ)課,理論知識固然重要,但通過動手實踐將理論知識應(yīng)用于實際設(shè)計才是重中之重。在為期兩周的“數(shù)據(jù)結(jié)構(gòu)課程設(shè)計”中,我明確了學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法的最終目的是解決實際的應(yīng)用問題。</p>
84、<p> 在課設(shè)中,通過分析任務(wù)書,在已學(xué)基礎(chǔ)上構(gòu)造出程序大體框架,畫出系統(tǒng)結(jié)構(gòu)圖,確定程序需要哪些模塊。當(dāng)遇到不懂的地方,借助圖書館的各種相關(guān)資料或參考網(wǎng)上資料,必要時求助老師和同學(xué),最終解決問題。例如一種算法可以采用多種語句來實現(xiàn),不知選擇哪種才是最優(yōu)?通過請教同學(xué),比較每一種時間復(fù)雜性后最終選出最優(yōu)方法。通過完成“走迷宮游戲”,使我有了很多收獲,首先是拿到一個實際問題如何進(jìn)行分析,選擇哪種數(shù)據(jù)結(jié)構(gòu)來實現(xiàn),并且學(xué)到了
85、如何從一個軟件工作者的角度來具體完成一個程序設(shè)計過程;其次,體會到了如何充分利用圖書館的資料解決存在的問題,也同時接觸到了一些課外的軟件工具,大大開拓了視野。最后,在對程序的多次調(diào)試改進(jìn)中,使我更進(jìn)一步熟悉了c++的運(yùn)行環(huán)境,也極大的提高了自身對程序的調(diào)試能力,能在編譯錯誤提示下,準(zhǔn)確找出錯誤并改正過來,使程序正常運(yùn)行。</p><p> 總之,在本次課程設(shè)計中,使我對《數(shù)據(jù)結(jié)構(gòu)》這門課有了更進(jìn)一步的理解,理解
86、了其在程序開發(fā)中的地位及作用,課本上扎實的理論知識可謂編程的根基,在此基礎(chǔ)上通過親自動手實踐解決現(xiàn)實中具體問題。這次極大鍛煉了我的各方面能力,學(xué)到了許多課本上不曾接觸到的知識,提高了動手實踐能力,實現(xiàn)了從課本理論知識到實際編程設(shè)計的緊密連接,對一個具體的軟件開發(fā)過程有了大致了解,同時也明確了自身存在問題和發(fā)展方向,實為受益匪淺。</p><p><b> 6參考書目:</b></p&
87、gt;<p> [1]譚浩強(qiáng),《C++程序設(shè)計》,北京,清華大學(xué)出版社,2006年.</p><p> [2]數(shù)據(jù)結(jié)構(gòu)與算法,科學(xué)出版社,2005.08;趙文靜 祁飛等編著</p><p> [3]數(shù)據(jù)結(jié)構(gòu)-C++語言描述,西安交通大學(xué)出版社,1999.01,趙文靜編著</p><p> [4]數(shù)據(jù)結(jié)構(gòu) c語言版 人民郵電出版社 2011年 嚴(yán)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---走迷宮游戲
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---走迷宮游戲
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-走迷宮
- 迷宮游戲數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告——可視化走迷宮游戲
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--flash 迷宮小游戲
- 數(shù)據(jù)結(jié)構(gòu)迷宮課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)迷宮課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---迷宮
- 迷宮問題——數(shù)據(jù)結(jié)構(gòu)課程設(shè)計迷宮問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(迷宮問題)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計----迷宮求解
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-迷宮求解
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計迷宮問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--迷宮問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-迷宮問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-迷宮求解
- 數(shù)據(jù)結(jié)構(gòu)迷宮問題課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計—迷宮問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計之迷宮
評論
0/150
提交評論