2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論