版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> C語(yǔ)言與數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告</p><p> 學(xué) 號(hào) </p><p> 姓 名 </p><p> 課程設(shè)計(jì)題目 迷宮求解 </p><p> 小組成員
2、 </p><p> 2012 年 12 月</p><p><b> 目 錄</b></p><p> 1 需求分析 </p><p> 1.1 功能與數(shù)據(jù)需求
3、 </p><p> 1.1.1 題目要求的功能 </p><p> 1.1.2 擴(kuò)展功能 </p><p>
4、 1.2 界面需求 </p><p> 1.3 開(kāi)發(fā)環(huán)境與運(yùn)行需求 </p><p> 2 概要設(shè)計(jì) &
5、lt;/p><p><b> 2.1主要數(shù)據(jù)結(jié)構(gòu)</b></p><p><b> 2.2程序總體結(jié)構(gòu)</b></p><p> 2.3各模塊函數(shù)說(shuō)明</p><p><b> 3 詳細(xì)設(shè)計(jì)</b></p><p> 3.1算法分析與設(shè)計(jì)</
6、p><p> 3.2主要程序段設(shè)計(jì)</p><p><b> 4 測(cè)試</b></p><p><b> 5 使用說(shuō)明</b></p><p> 5.1應(yīng)用程序功能的詳細(xì)說(shuō)明</p><p> 5.2應(yīng)用程序運(yùn)行環(huán)境要求</p><p> 5.
7、5輸入數(shù)據(jù)類型、格式和內(nèi)容限制</p><p><b> 6 總結(jié)提高</b></p><p><b> 6.1課程設(shè)計(jì)總結(jié)</b></p><p> 6.2開(kāi)發(fā)中遇到的問(wèn)題和解決方法</p><p> 6.3 對(duì)自己完成課設(shè)完成情況的評(píng)價(jià)</p><p> 6.4
8、《C語(yǔ)言與數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)》課程的意見(jiàn)與建議</p><p><b> 附錄:程序源代碼</b></p><p> 1 需求分析 </p><p> 1.1 功能與數(shù)據(jù)需求
9、 </p><p> 1.1.1 題目要求的功能 以一個(gè)m×n的長(zhǎng)方形表示迷宮,0和1分別表示迷宮中的通路和障礙。設(shè)計(jì)一個(gè)程序,對(duì)任意設(shè)定的迷宮,求出一條從入口到出口的通路,或得出沒(méi)有通路的結(jié)論。 測(cè)試數(shù)據(jù):迷宮的測(cè)試數(shù)據(jù)如下:左上角(1,1)為入口,右下角(9,8)為出口。
10、 </p><p> 1 2 3 4 5 6 7 8</p><p> 1.1.2 擴(kuò)展功能 </p><p> ?。?)編寫(xiě)遞歸形式的算法,求得迷宮中所有可能的通路;</p><p> ?。?)以方陣形式輸出迷宮及其通路。</p><p> 1.2 界面需求 </p>
11、<p><b> 輸入行數(shù)和列數(shù)</b></p><p> 輸入每一行中的通路(0,0)和障礙(1,1).</p><p> 輸入入口坐標(biāo)(1,1)和出口坐標(biāo)(m,n).</p><p> 1.3 開(kāi)發(fā)環(huán)境與運(yùn)行需求 </p><p> 開(kāi)發(fā)環(huán)境 Microsoft Visual C++ 6.0
12、</p><p> 最低運(yùn)行需求 windows xp ;32位系統(tǒng)</p><p> 2 概要設(shè)計(jì) </p><p> 2.1主要數(shù)據(jù)結(jié)構(gòu):</p><p> typedef struct /*用于存放迷宮的位置和該點(diǎn)信息*/</p><p><b> {<
13、/b></p><p> int x,y,d;</p><p> }Datatype;</p><p> typedef struct /*該棧用于存儲(chǔ)走過(guò)的結(jié)點(diǎn)*/</p><p><b> {</b></p><p> Datatype data[MAXSIZE]
14、;</p><p><b> int top;</b></p><p> }Sqstack,*PSqstack;</p><p> typedef struct /*用于存放當(dāng)前結(jié)點(diǎn)可走的四個(gè)方向*/</p><p><b> {</b></p><p>
15、;<b> int x,y;</b></p><p><b> }item;</b></p><p><b> 2.2程序總體結(jié)構(gòu)</b></p><p> 2.3各模塊函數(shù)說(shuō)明</p><p> PSqstack Init_Sqstack()
16、 /*初始化空棧*/</p><p> int Push_Sqstack(PSqstack s,Datatype x) /*入棧*/</p><p> int Pop_Sqstack(PSqstack s,Datatype *x) /*出棧*/</p><p> void Destroy_Sqstack(PSqstack *s)
17、 /*銷毀棧*/</p><p> int Mazepath(int maze[][n+2],int x0,int y0) /*求迷宮路徑函數(shù),入口參數(shù): 指向迷宮數(shù)組的指針,開(kāi)始點(diǎn)(x0,y0)*/</p><p> Pop_ Sqstack(s,&temp);</p><p> Push_Sqstack(t,temp);
18、 /*棧t是棧s的逆,因?yàn)閟保存 的途徑是反的,加t 使輸出的途徑變?yōu)檎?/</p><p><b> 3 詳細(xì)設(shè)計(jì)</b></p><p> 3.1算法分析與設(shè)計(jì)</p><p> 思路:計(jì)算機(jī)解迷宮通常用的是“窮舉求解”方法,即從入口出發(fā),順著某一個(gè)方向進(jìn)行探索,若能走通,則繼續(xù)往前進(jìn);否則沿著原路退回,換
19、一個(gè)方向繼續(xù)探索,直至出口位置,求得一條通路。假如所有可能的通路都探索到而未能到達(dá)出口,則所設(shè)定的迷宮沒(méi)有通路。</p><p> 實(shí)現(xiàn):假設(shè)“當(dāng)前位置”指的是“在收索過(guò)程中某一時(shí)刻所在圖中某個(gè)方 塊位置”,則求迷宮中的一條路徑的算法的基本思想是:若當(dāng)前位置“可通”, 則納入“當(dāng)前路徑”,并繼續(xù)朝“下一位置”探索,即切換“下一位置”為“當(dāng)前位置”,如此重復(fù)直至到達(dá)出口;若當(dāng)前位置“不可通”則應(yīng)該順著“來(lái)向”
20、退回到“前一通道塊”,然后朝著除“來(lái)向”之外的其他方向繼續(xù)探索;若該通道塊的四周4個(gè)方塊均“不可通”,則應(yīng)從“當(dāng)前路徑”上刪除該通道塊。所謂“下一位置”指的是“當(dāng)前位置”四周4個(gè)方向(東·南·西·北)上相鄰的方塊。假設(shè)以棧S記錄“當(dāng)前路徑”,則棧頂中存放的是“從當(dāng)前路徑上最后一個(gè)通道塊”。由此,“納入路徑”的操作即為“當(dāng)前位置入?!?;“從當(dāng)前路徑上刪除前一通道塊”的操作即為“入?!?。</p>
21、<p> 3.2主要程序段設(shè)計(jì)</p><p> void main() </p><p><b> {</b></p><p><b> int i,j;</b></p&
22、gt;<p> int maze[m+2][n+2];</p><p> printf("請(qǐng)輸入迷宮矩陣:9*8\n");</p><p> for(i=0,j=0;i<m+2;i++) /*將迷宮四周賦值為1,即不可走*/</p><p> maze[i][j]=1;</p>
23、<p> for(i=0,j=0;j<n+2;j++)</p><p> maze[i][j]=1;</p><p> for(i=0,j=n+1;i<m+2;i++)</p><p> maze[i][j]=1;</p><p> for(i=m+1,j=0;j<n+2;j++)</p>
24、<p> maze[i][j]=1;</p><p> for(i=1;i<m+1;i++) /*給迷宮賦值*/</p><p><b> {</b></p><p> for(j=1;j<n+1;j++)</p><p> scanf(&quo
25、t;%d",&maze[i][j]);</p><p><b> }</b></p><p> for(i=0;i<m+2;i++) /*打印迷宮*/</p><p><b> {</b></p><p> for(j=0;j&
26、lt;n+2;j++)</p><p><b> {</b></p><p> if(maze[i][j]==0)</p><p> printf(" ");</p><p><b> else</b></p><p> printf("
27、;#");</p><p><b> }</b></p><p> printf("\n");</p><p><b> }</b></p><p> Mazepath(maze,1,1);</p><p><b> }<
28、;/b></p><p><b> 主函數(shù)設(shè)計(jì)</b></p><p><b> main{</b></p><p><b> 定義迷宮數(shù)組;</b></p><p> 將迷宮四周賦值為1,即不可走;</p><p> 按所給格式 輸入迷
29、宮矩陣(m,n),1為路障,0為該位置為通路;</p><p><b> 打印迷宮矩陣;</b></p><p> 調(diào)用Mazepath函數(shù);</p><p><b> }</b></p><p> int Mazepath(int maze[][n+2],int x0,int y0)
30、 /*求迷宮路徑函數(shù), 入口參數(shù):指向迷宮數(shù)組的指針,開(kāi)始點(diǎn)(x0,y0)*/</p><p><b> {</b></p><p> PSeqstack s,t;</p><p> Datatype temp;</p><p> int x,y,d,i,j;</p><p> it
31、em move[4];</p><p> if(maze[1][1]==1||maze[m][n]==1)</p><p> printf("輸入迷宮數(shù)據(jù)錯(cuò)誤,起點(diǎn)和終點(diǎn)應(yīng)為:0\n");</p><p><b> else</b></p><p><b> {</b>&
32、lt;/p><p> move[0].x=0;</p><p> move[0].y=1;</p><p> move[1].x=1;</p><p> move[1].y=0;</p><p> move[2].x=0;</p><p> move[2].y=-1;</p>
33、<p> move[3].x=-1;</p><p> move[3].y=0; /*對(duì)move定義為向四個(gè)方向探索的數(shù)組*/</p><p> s=Init_Seqstack(); /*初始化棧s*/</p><p> t=Init_Seq
34、stack(); /*初始化棧t*/</p><p><b> if(!s)</b></p><p><b> {</b></p><p> printf("棧初始化失敗\n");</p><p> return (0);&l
35、t;/p><p><b> }</b></p><p> temp.x=x0;</p><p> temp.y=y0;</p><p><b> temp.d=0;</b></p><p> Push_Seqstack(s,temp);
36、 /*迷宮入口點(diǎn)入棧*/</p><p> while(s->top!=-1)</p><p><b> {</b></p><p> Pop_Seqstack(s,&temp);</p><p><b> x=temp.x;</b></p><p>
37、<b> y=temp.y;</b></p><p> d=0; /*將方向重新定位為右方,即move[0]*/</p><p> while(d<4) /*在該點(diǎn)向四個(gè)方向嘗試走*/</p><p><b>
38、; {</b></p><p> i=x+move[d].x;</p><p> j=y+move[d].y;</p><p> if(maze[i][j]==0) /*該路可走*/</p><p><b> {</b></p><p><
39、b> temp.x=x;</b></p><p><b> temp.y=y;</b></p><p><b> temp.d=d;</b></p><p> Push_Seqstack(s,temp); /*將可走的路入棧*/</p><p><b>
40、; x=i;</b></p><p><b> y=j;</b></p><p> maze[x][y]=-1; /*將走過(guò)的點(diǎn)標(biāo)記為-1*/</p><p> if(x==m&&y==n) /*判斷走到終點(diǎn)*/</p><p>
41、<b> {</b></p><p> printf("該迷宮的走法為:\n");</p><p> while(s->top!=-1)</p><p><b> {</b></p><p> Pop_Seqstack(s,&temp);</p>
42、;<p> Push_Seqstack(t,temp); /*棧t是棧s的逆,因?yàn)閟保存的途徑是反的,加t使輸出的途徑變?yōu)檎?/</p><p><b> }</b></p><p> Destroy_Seqstack(&s); /*銷毀棧*/</p><p> while(t->top
43、!=-1) /*打印走過(guò)的途徑*/</p><p><b> {</b></p><p> Pop_Seqstack(t,&temp);</p><p> printf("<%d,%d,%d>",temp.x,temp.y,temp.d);</p><p&g
44、t;<b> }</b></p><p> printf("<%d,%d>",m,n);</p><p> Destroy_Seqstack(&t); /*銷毀棧*/</p><p> return OK;</p><p><b> }</b
45、></p><p><b> else</b></p><p> d=0; /*將方向定位為右方*/</p><p><b> }</b></p><p><b> else</b></p><p
46、> d++; /*嘗試其 他方向是否可走*/</p><p><b> }</b></p><p><b> }</b></p><p> printf("該迷宮無(wú)法走出\n&qu
47、ot;);</p><p> Destroy_Seqstack(&s);</p><p> return ERROR;</p><p><b> }</b></p><p><b> }</b></p><p> Mazepath函數(shù)</p>
48、<p> {if(迷宮入口或迷宮是否有通路)</p><p> Printf(“輸入迷宮數(shù)據(jù)錯(cuò)誤“);</p><p><b> else</b></p><p> {對(duì)move定義為向四個(gè)方向探索的數(shù)組</p><p><b> 初始化棧s,t;</b></p>
49、<p><b> 迷宮入口點(diǎn)入棧</b></p><p> While(判斷s是否為空)</p><p> { 入口參數(shù):指向迷宮數(shù)組的指針,開(kāi)始點(diǎn)(x0,y0)</p><p> while(d<4)</p><p><b> {初始位置</b></p>
50、<p><b> If(該路口走)</b></p><p><b> 將可走的路入棧</b></p><p> 將走過(guò)的點(diǎn)標(biāo)記為-1</p><p> If( 判斷走到終點(diǎn))</p><p> {棧t是棧s的逆,因?yàn)閟保存的途徑是反的</p><p>
51、加t使輸出的途徑變?yōu)檎?lt;/p><p><b> 銷毀棧s;</b></p><p><b> 打印走過(guò)的途徑;</b></p><p><b> 銷毀棧t;</b></p><p><b> }</b></p><p>
52、<b> Else</b></p><p> 將方向定位為右方*/</p><p><b> }</b></p><p><b> Else</b></p><p> 嘗試其他方向是否可走*/</p><p><b> }</
53、b></p><p><b> }</b></p><p><b> }</b></p><p><b> 4 測(cè)試</b></p><p><b> 迷宮路徑測(cè)試</b></p><p><b> 迷宮方
54、向測(cè)試</b></p><p><b> 無(wú)法走出迷宮的測(cè)試</b></p><p><b> 完整的迷宮測(cè)試</b></p><p><b> 5 使用說(shuō)明</b></p><p> 5.1應(yīng)用程序功能的詳細(xì)說(shuō)明</p><p>
55、 使用者自己設(shè)計(jì)一個(gè)(9,8)迷宮,迷宮為9行8列的矩陣,1表示該 位置為路障,0表示該位置為通路, 每一行中兩位置之間用空格隔開(kāi)。進(jìn) 入下一行設(shè)計(jì)按enter鍵。設(shè)計(jì)特別要求,矩陣位置(1,1),(9,8)為0, 否則程序不能運(yùn)行。</p><p> 按enter鍵運(yùn)行程.</p><p> 5.2應(yīng)用程序運(yùn)行環(huán)境要求</p><p>
56、Microsoft Visual C++6.0</p><p> 5.5輸入數(shù)據(jù)類型、格式和內(nèi)容限制</p><p> 輸入的數(shù)據(jù)都是整型(int),輸入迷宮的數(shù)據(jù)間要用空格或回車隔開(kāi)</p><p><b> 6 總結(jié)提高</b></p><p><b> 6.1課程設(shè)計(jì)總結(jié)</b><
57、;/p><p> 這次的實(shí)驗(yàn),我們發(fā)現(xiàn)書(shū)本上理論性的東西與在實(shí)際運(yùn)用中的還是有一定的出入的,所以有些問(wèn)題不但要深入地理解,而且要不斷地更正以前的錯(cuò)誤思維,才能完成實(shí)驗(yàn)設(shè)計(jì)。通過(guò)這次的課程設(shè)計(jì)我們也更加理解和掌握了棧和數(shù)組的正確使用方法,更為重要的是了解了通過(guò)數(shù)組和結(jié)構(gòu)體結(jié)合來(lái)生成的數(shù)據(jù)結(jié)構(gòu)的特點(diǎn)及應(yīng)用,這是在這之前未接觸過(guò)的??傊?,通過(guò)這次的課程設(shè)計(jì),讓我對(duì)計(jì)算機(jī)編程在實(shí)際問(wèn)題中的應(yīng)用有了極大的了解,同時(shí)也讓我知道
58、了棧的強(qiáng)大,很多問(wèn)題都可以用棧來(lái)解決。</p><p> 6.2開(kāi)發(fā)中遇到的問(wèn)題和解決方法</p><p> 1.(安飛)問(wèn)題:對(duì)循環(huán)結(jié)構(gòu)與數(shù)組結(jié)合對(duì)迷宮外墻的的設(shè)計(jì)不知道該怎么應(yīng)用。 解決方法:上網(wǎng)查找?guī)讉€(gè)迷宮的設(shè)計(jì),以后結(jié)合自己的理解,小組討論后,建了一個(gè)二維數(shù)組,定義2個(gè)變量,控制變量法,讓迷宮四周為1。</p><p> 2. (洪飛) 問(wèn)題
59、:對(duì)于點(diǎn)向四個(gè)方向的走向不清楚,不知道如何判斷該路是否可走,最后如何判斷到達(dá)終點(diǎn)以及出棧。</p><p> 解決方法:首先將迷宮口的點(diǎn)入棧,然后將點(diǎn)的坐標(biāo)賦值給x,y,將方向重新定位為右方。用while循環(huán)來(lái)判斷四個(gè)方向是否可走,用if語(yǔ)句來(lái)來(lái)判斷該路是否可走,最后將走過(guò)的路徑入棧,將走過(guò)的點(diǎn)標(biāo)記為-1,同樣用if語(yǔ)句來(lái)判斷到達(dá)終點(diǎn),最后出棧。</p><p> 3.(俞杰)問(wèn)題:剛
60、開(kāi)始的時(shí)候我們只定義了一個(gè)棧s=Init_Sqstack();但是在輸出結(jié)果時(shí)發(fā)現(xiàn)無(wú)法把所有走過(guò)的坐標(biāo)輸出來(lái)!最后通過(guò)討論,知道原來(lái)?xiàng)J呛筮M(jìn)先出,所以只能輸出最后一個(gè)坐標(biāo)。</p><p> 解決方法:引入另一個(gè)棧t=Init_Sqstack();它的作用是:棧t是棧s的逆,因?yàn)閟保存的途徑是反的,加t 使輸出的途徑變?yōu)檎@樣就可以把所有的坐標(biāo)輸出來(lái)。</p><p> 6.3 對(duì)自
61、己完成課設(shè)完成情況的評(píng)價(jià)</p><p> 在這次的課程設(shè)計(jì)中,我們小組通過(guò)對(duì)棧和數(shù)組的運(yùn)用,終于完成了迷宮求解的編程,在我們剛拿到題目的時(shí)候,我們就知道這一次的任務(wù)必須要棧來(lái)實(shí)現(xiàn),所以我們把棧的內(nèi)容復(fù)習(xí)了一下才開(kāi)始編的,不過(guò)當(dāng)我們把棧的部分編好的時(shí)候,才知道后面的似乎更難。在方向的可走上我提出使用類似于二維坐標(biāo)的方式來(lái)實(shí)現(xiàn),也就是數(shù)組move[ ].x或move[ ].y來(lái)實(shí)現(xiàn)的。我覺(jué)得這種思想好在把數(shù)學(xué)的知
62、識(shí)融合在程序里,使的整個(gè)程序更容易理解。最后,在我們?nèi)齻€(gè)人共同討論、上網(wǎng)查找相關(guān)知識(shí)和向其他同學(xué)請(qǐng)教最終解決了遇到的問(wèn)題,完成了整個(gè)設(shè)計(jì)。</p><p> 6.4《C語(yǔ)言與數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)》課程的意見(jiàn)與建議</p><p> C語(yǔ)言是數(shù)據(jù)結(jié)構(gòu)這門(mén)課的核心,沒(méi)有良好的c語(yǔ)言基礎(chǔ),學(xué)習(xí)這門(mén)課程是很難的。首先,我們?cè)陂喿x數(shù)據(jù)結(jié)構(gòu)的時(shí)候,都是用c語(yǔ)言編寫(xiě)的,這就需要我們把程序看懂;其次,當(dāng)你
63、完成某部分的數(shù)據(jù)結(jié)構(gòu)的知識(shí)時(shí),必須要把它完整了,才能在VC++ 6.0上運(yùn)行,我發(fā)現(xiàn)我們?cè)谕瓿删幊毯?,main函數(shù)部分是我們最容易錯(cuò)的部分,這和我們c語(yǔ)言的基礎(chǔ)有關(guān)吧。所以我的建議是:</p><p> 希望老師在上課的時(shí)候能夠簡(jiǎn)單幫我們復(fù)習(xí)回顧一下c語(yǔ)言知識(shí)。</p><p> 希望老師能夠在舉例的時(shí)候能夠多用幾個(gè)完整的程序,這樣可以運(yùn)行給我們看看,更能夠加深我們對(duì)知識(shí)的理解。<
64、;/p><p><b> 附錄:程序源代碼</b></p><p> #include<stdio.h></p><p> #include<stdlib.h></p><p> #define MAXSIZE 100</p><p> #define ERROR 0
65、</p><p> #define OK 1</p><p> #define m 9</p><p> #define n 8</p><p> typedef struct /*用于存放迷宮的位置和該點(diǎn)信息*/</p><p><b> {</b></p>
66、<p> int x,y,d;</p><p> }Datatype;</p><p> typedef struct /*該棧用于存儲(chǔ)走過(guò)的結(jié)點(diǎn)*/</p><p><b> {</b></p><p> Datatype data[MAXSIZE];</p><
67、p><b> int top;</b></p><p> }Sqstack,*PSqstack;</p><p> typedef struct /*用于存放當(dāng)前結(jié)點(diǎn)可走的四個(gè)方向*/</p><p><b> {</b></p><p><b> int x
68、,y;</b></p><p><b> }item;</b></p><p> PSqstack Init_Sqstack() /*初始化空棧*/</p><p><b> {</b></p><p> PSqstack s;</p><p>
69、 s=(PSqstack)malloc(sizeof(Sqstack));</p><p><b> if(s)</b></p><p> s->top=-1;</p><p><b> return s;</b></p><p><b> }</b></
70、p><p> int Push_Sqstack(PSqstack s,Datatype x) /*入棧*/</p><p><b> {</b></p><p> if(s->top==MAXSIZE-1)</p><p> return ERROR; /
71、*棧滿不能入棧*/</p><p><b> else</b></p><p><b> {</b></p><p><b> s->top++;</b></p><p> s->data[s->top]=x;</p><p>
72、 return OK;</p><p><b> }</b></p><p><b> }</b></p><p> int Pop_Sqstack(PSqstack s,Datatype *x) /*出棧*/</p><p><b> {</b></p&g
73、t;<p><b> if(!s)</b></p><p> return ERROR; /*??夭荒艹鰲?/</p><p><b> else</b></p><p><b> {</b></p><p&g
74、t; *x=s->data[s->top];</p><p><b> s->top--;</b></p><p> return OK;</p><p><b> }</b></p><p><b> }</b></p><p&
75、gt; void Destroy_Sqstack(PSqstack *s) /*銷毀棧*/</p><p><b> {</b></p><p><b> if(*s)</b></p><p><b> free(*s);</b></p><p><
76、b> *s=NULL;</b></p><p><b> return;</b></p><p><b> }</b></p><p> int Mazepath(int maze[][n+2],int x0,int y0) /*求迷宮路徑函數(shù),入口參數(shù):指向迷宮數(shù)組的指針,開(kāi)始點(diǎn)(x0,y
77、0)*/</p><p><b> {</b></p><p> PSqstack s,t;</p><p> Datatype temp;</p><p> int x,y,d,i,j;</p><p> item move[4];</p><p> if(m
78、aze[1][1]==1||maze[m][n]==1)</p><p> printf("輸入迷宮數(shù)據(jù)錯(cuò)誤,起點(diǎn)和終點(diǎn)應(yīng)為:0\n");</p><p><b> else</b></p><p><b> {</b></p><p> move[0].x=0;<
79、/p><p> move[0].y=1;</p><p> move[1].x=1;</p><p> move[1].y=0;</p><p> move[2].x=0;</p><p> move[2].y=-1;</p><p> move[3].x=-1;</p>
80、<p> move[3].y=0; /*對(duì)move定義為向四個(gè)方向探索的數(shù)組*/</p><p> s=Init_Sqstack(); /*初始化棧s*/</p><p> t=Init_Sqstack(); /*初始化棧t*
81、/</p><p><b> if(!s)</b></p><p><b> {</b></p><p> printf("棧初始化失敗\n");</p><p> return (0);</p><p><b> }</b>
82、;</p><p> temp.x=x0;</p><p> temp.y=y0;</p><p><b> temp.d=0;</b></p><p> Push_Sqstack(s,temp); /*迷宮入口點(diǎn)入棧*/</p><p> while
83、(s->top!=-1)</p><p><b> {</b></p><p> Pop_Sqstack(s,&temp);</p><p><b> x=temp.x;</b></p><p><b> y=temp.y;</b></p>
84、<p> d=0; /*將方向重新定位為右方,即move[0]*/</p><p> while(d<4) /*在該點(diǎn)向四個(gè)方向嘗試走*/</p><p><b> {</b></p><p> i=x+m
85、ove[d].x;</p><p> j=y+move[d].y;</p><p> if(maze[i][j]==0) /*該路可走*/</p><p><b> {</b></p><p><b> temp.x=x;</b></p><
86、p><b> temp.y=y;</b></p><p><b> temp.d=d;</b></p><p> Push_Sqstack(s,temp); /*將可走的路入棧*/</p><p><b> x=i;</b></p><p><b
87、> y=j;</b></p><p> maze[x][y]=-1; /*將走過(guò)的點(diǎn)標(biāo)記為-1*/</p><p> if(x==m&&y==n) /*判斷走到終點(diǎn)*/</p><p><b> {</b></p><p>
88、 printf("該迷宮的走法為:\n");</p><p> while(s->top!=-1)</p><p><b> {</b></p><p> Pop_Sqstack(s,&temp);</p><p> Push_Sqstack(t,temp); /*棧t是
89、棧s的逆,因?yàn)閟保存的途徑是反的,加t使輸出的途徑變?yōu)檎?/</p><p><b> }</b></p><p> Destroy_Sqstack(&s); /*銷毀棧*/</p><p> while(t->top!=-1) /*打印走過(guò)的途徑*/</p><p&
90、gt;<b> {</b></p><p> Pop_Sqstack(t,&temp);</p><p> printf("<%d,%d,%d>",temp.x,temp.y,temp.d);</p><p><b> }</b></p><p>
91、printf("<%d,%d>",m,n);</p><p> Destroy_Sqstack(&t); /*銷毀棧*/</p><p> return OK;</p><p><b> }</b></p><p><b> else</b&g
92、t;</p><p> d=0; /*將方向定位為右方*/</p><p><b> }</b></p><p><b> else</b></p><p> d++; /*嘗試其他方向是
93、否可走*/</p><p><b> }</b></p><p><b> }</b></p><p> printf("該迷宮無(wú)法走出\n");</p><p> Destroy_Sqstack(&s);</p><p> return
94、 ERROR;</p><p><b> }</b></p><p><b> }</b></p><p> void main()</p><p><b> {</b></p><p><b> int i,j;</b>
95、</p><p> int maze[m+2][n+2];</p><p> printf("請(qǐng)輸入迷宮矩陣:9*8\n");</p><p> for(i=0,j=0;i<m+2;i++) /*將迷宮四周賦值為1,即不可走*/</p><p> maze[i][j]=1;<
96、;/p><p> for(i=0,j=0;j<n+2;j++)</p><p> maze[i][j]=1;</p><p> for(i=0,j=n+1;i<m+2;i++)</p><p> maze[i][j]=1;</p><p> for(i=m+1,j=0;j<n+2;j++)<
97、;/p><p> maze[i][j]=1;</p><p> for(i=1;i<m+1;i++) /*給迷宮賦值*/</p><p><b> {</b></p><p> for(j=1;j<n+1;j++)</p><p> sca
98、nf("%d",&maze[i][j]);</p><p><b> }</b></p><p> for(i=0;i<m+2;i++) /*打印迷宮*/</p><p><b> {</b></p><p> for
99、(j=0;j<n+2;j++)</p><p><b> {</b></p><p> if(maze[i][j]==0)</p><p> printf(" ");</p><p><b> else</b></p><p> print
100、f("#");</p><p><b> }</b></p><p> printf("\n");</p><p><b> }</b></p><p> Mazepath(maze,1,1);</p><p><b>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)c語(yǔ)言課程設(shè)計(jì)報(bào)告之迷宮
- 數(shù)據(jù)結(jié)構(gòu)c語(yǔ)言版課程設(shè)計(jì)
- 課程設(shè)計(jì)-- 數(shù)據(jù)結(jié)構(gòu)—用c語(yǔ)言描述
- c語(yǔ)言數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---文章編輯
- c語(yǔ)言數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-文章編輯
- 迷宮(c語(yǔ)言版)--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)----集合運(yùn)算課程設(shè)計(jì)報(bào)告(c++)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 迷宮問(wèn)題非遞歸求解--數(shù)據(jù)結(jié)構(gòu)c語(yǔ)言課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論