迷宮求解數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告_第1頁
已閱讀1頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告</p><p>  題目:___________迷宮求解_____________________________</p><p>  班級:__________ </p><p>  姓名:_____________</p><p><b>  同組人: </b></p

2、><p><b>  學(xué)號: </b></p><p>  完成日期:_____年 月 日—— 年 月 日 </p><p>  目 錄</p><p>  第一部分 引言……………………………………………………………………3</p><p>  第二部分 課程設(shè)

3、計報告…………………………………………………………3</p><p>  第一章 課程設(shè)計目的…………………………………………………3</p><p>  第二章 課程設(shè)計內(nèi)容和要求…………………………………………4</p><p>  2.1 問題描述………………………………………………4</p><p>  2.2 設(shè)計要求…………………

4、……………………………4</p><p>  第三章 課程設(shè)計總體方案及分析……………………………………4</p><p>  3.1 問題分析………………………………………………4</p><p>  3.2 概要設(shè)計………………………………………………7</p><p>  3.3 詳細(xì)設(shè)計………………………………………………7</

5、p><p>  3.4 調(diào)試分析………………………………………………10</p><p>  3.5 測試結(jié)果………………………………………………10</p><p>  3.6 參考文獻(xiàn)………………………………………………12</p><p>  第三部分 課程設(shè)計總結(jié)…………………………………………………………13</p>&l

6、t;p>  附錄(源代碼)……………………………………………………………………14</p><p><b>  第一部分 引言</b></p><p>  數(shù)據(jù)結(jié)構(gòu)是一門理論性強(qiáng)、思維抽象、難度較大的課程,是基礎(chǔ)課和專業(yè)課之間的橋梁。該課程的先行課程是計算機(jī)基礎(chǔ)、程序設(shè)計語言、離散數(shù)學(xué)等,后續(xù)課程有操作系統(tǒng)、編譯原理、數(shù)據(jù)庫原理、軟件工程等。 通過本門課程的

7、學(xué)習(xí),我們應(yīng)該能透徹地理解各種數(shù)據(jù)對象的特點,學(xué)會數(shù)據(jù)的組織方法和實現(xiàn)方法,并進(jìn)一步培養(yǎng)良好的程序設(shè)計能力和解決實際問題的能力,而且該課程的研究方法對我們學(xué)生在校和離校后的學(xué)習(xí)和工作,也有著重要的意義。</p><p>  數(shù)據(jù)結(jié)構(gòu)是電子信息科學(xué)與技術(shù)專業(yè)的一門核心專業(yè)基礎(chǔ)課程,在該專業(yè)的課程體系中起著承上啟下的作用,學(xué)好數(shù)據(jù)結(jié)構(gòu)對于提高理論認(rèn)知水平和實踐能力有著極為重要的作用。學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的最終目的是為了獲得求

8、解問題的能力。對于現(xiàn)實世界中的問題,應(yīng)該能從中抽象出一個適當(dāng)?shù)臄?shù)學(xué)模型,該數(shù)學(xué)模型在計算機(jī)內(nèi)部用相應(yīng)的數(shù)據(jù)結(jié)構(gòu)來表示,然后設(shè)計一個解此數(shù)學(xué)模型的算法,再進(jìn)行編程調(diào)試,最后獲得問題的解答。</p><p>  基于此原因,暑期我們開設(shè)了數(shù)據(jù)結(jié)構(gòu)課程設(shè)計。針對數(shù)據(jù)結(jié)構(gòu)課程的特點,著眼于培養(yǎng)我們的實踐能力。實習(xí)課程是為了加強(qiáng)編程能力的培養(yǎng),鼓勵學(xué)生使用新興的編程語言。相信通過數(shù)據(jù)結(jié)構(gòu)課程實踐,無論是理論知識,還是實踐動

9、手能力,同學(xué)們都會有不同程度上的提高。</p><p>  第二部分 課程設(shè)計報告</p><p><b>  課程設(shè)計目的</b></p><p>  僅僅認(rèn)識到隊列是一種特殊的線性表是遠(yuǎn)遠(yuǎn)不夠的,本次實習(xí)的目的在于使學(xué)生深入了解隊列的特征,以便在實際問題背景下靈活運用它,同時還將鞏固這種數(shù)據(jù)結(jié)構(gòu)的構(gòu)造方法</p><

10、p>  第二章  課程設(shè)計內(nèi)容和要求 </p><p>  2.1問題描述: </p><p>  迷宮問題是取自心理學(xué)的一個古典實驗。在該實驗中,把一只老鼠從一個無頂大盒子的門放入,在盒子中設(shè)置了許多墻,對行進(jìn)方向形成了多處阻擋。盒子僅有一個出口,在出口處放置一塊奶酪,吸引老鼠在迷宮中尋找道路以到達(dá)出口。對同一只老鼠重復(fù)進(jìn)行上述實驗,一直到老鼠從入口走到出口,而不走

11、錯一步。老鼠經(jīng)過多次試驗最終學(xué)會走通迷宮的路線。設(shè)計一個計算機(jī)程序?qū)θ我庠O(shè)定的矩形迷宮如下圖A所示,求出一條從入口到出口的通路,或得出沒有通路的結(jié)論。                        &

12、#160;                              圖A</p><p><b>

13、  2.2設(shè)計要求:</b></p><p>  要求設(shè)計程序輸出如下:</p><p>  (1) 建立一個大小為m×n的任意迷宮(迷宮數(shù)據(jù)可由用戶輸入或由程序自動生成),并在屏幕上顯示出來;</p><p> ?。?)找出一條通路的二元組(i,j)數(shù)據(jù)序列,(i,j)表示通路上某一點的坐標(biāo)。</p><p> ?。?

14、)用一種標(biāo)志(如數(shù)字8)在迷宮中標(biāo)出該條通路;</p><p>  (4)在屏幕上輸出迷宮和通路;</p><p> ?。?)上述功能可用菜單選擇。</p><p>  第三章      課程設(shè)計總體方案及分析</p><p><b>  3.1 問題分析:</b><

15、;/p><p><b>  1.迷宮的建立:</b></p><p>  迷宮中存在通路和障礙,為了方便迷宮的創(chuàng)建,可用0表示通路,用1表示障礙,這樣迷宮就可以用0、1矩陣來描述,</p><p><b>  2.迷宮的存儲:</b></p><p>  迷宮是一個矩形區(qū)域,可以使用二維數(shù)組表示迷宮,這

16、樣迷宮的每一個位置都可以用其行列號來唯一指定,但是二維數(shù)組不能動態(tài)定義其大小,我們可以考慮先定義一個較大的二維數(shù)組maze[M+2][N+2],然后用它的前m行n列來存放元素,即可得到一個m×n的二維數(shù)組,這樣(0,0)表示迷宮入口位置,(m-1,n-1)表示迷宮出口位置。</p><p>  注:其中M,N分別表示迷宮最大行、列數(shù),本程序M、N的缺省值為39、39,當(dāng)然,用戶也可根據(jù)需要,調(diào)整其大小。

17、</p><p>  3.迷宮路徑的搜索:</p><p>  首先從迷宮的入口開始,如果該位置就是迷宮出口,則已經(jīng)找到了一條路徑,搜索工作結(jié)束。否則搜索其上、下、左、右位置是否是障礙,若不是障礙,就移動到該位置,然后再從該位置開始搜索通往出口的路徑;若是障礙就選擇另一個相鄰的位置,并從它開始搜索路徑。為防止搜索重復(fù)出現(xiàn),則將已搜索過的位置標(biāo)記為2,同時保留搜索痕跡,在考慮進(jìn)入下一個位置搜

18、索之前,將當(dāng)前位置保存在一個隊列中,如果所有相鄰的非障礙位置均被搜索過,且未找到通往出口的路徑,則表明不存在從入口到出口的路徑。這實現(xiàn)的是廣度優(yōu)先遍歷的算法,如果找到路徑,則為最短路徑。</p><p>  以矩陣 0 0 1 0 1 為例,來示范一下</p><p><b>  1 0 0 1 0</b></p><p><b>

19、  1 0 0 0 1</b></p><p><b>  0 0 1 0 0</b></p><p>  首先,將位置(0,0)(序號0)放入隊列中,其前節(jié)點為空,從它開始搜索,其標(biāo)記變?yōu)?,由于其只有一個非障礙位置,所以接下來移動到(0,1)(序號1),其前節(jié)點序號為0,標(biāo)記變?yōu)?,然后從(0,1)移動到(1,1)(序號2),放入隊列中,其前節(jié)點序號為

20、1,(1,1)存在(1,2)(序號3)、(2,1)(序號4)兩個可移動位置,其前節(jié)點序號均為2.對于每一個非障礙位置,它的相鄰非障礙節(jié)點均入隊列,且它們的前節(jié)點序號均為該位置的序號,所以如果存在路徑,則從出口處節(jié)點的位置,逆序就可以找到其從出口到入口的通路。</p><p><b>  如下表所示:</b></p><p>  0 1 2

21、 3 4 5 6 7 8 9 10</p><p>  由此可以看出,得到最短路徑:(3,4)(3,3)(2,3)(2,2)(1,2)(1,1)(0,1)(0,0)</p><p>  搜索算法流程圖如下所示:</p><p><b>  3.2 概要設(shè)計</b></p

22、><p>  1.①構(gòu)建一個二維數(shù)組maze[M+2][N+2]用于存儲迷宮矩陣</p><p> ?、谧詣踊蚴謩由擅詫m,即為二維數(shù)組maze[M+2][N+2]賦值</p><p> ?、蹣?gòu)建一個隊列用于存儲迷宮路徑</p><p> ?、芙⒚詫m節(jié)點struct point,用于存儲迷宮中每個節(jié)點的訪問情況</p><p

23、><b> ?、輰崿F(xiàn)搜索算法</b></p><p> ?、奁聊簧巷@示操作菜單</p><p>  2.本程序包含10個函數(shù):</p><p>  (1)主函數(shù) main()</p><p>  (2)手動生成迷宮函數(shù) shoudong_maze()</p><p>  (3)自動生成迷宮函

24、數(shù) zidong_maze()</p><p>  (4)將迷宮打印成圖形 print_maze()</p><p>  (5)打印迷宮路徑 (若存在路徑) result_maze()</p><p>  (6)入隊 enqueue()</p><p>  (7)出隊 dequeue()</p><p>  (8)判斷

25、隊列是否為空 is_empty()</p><p>  (9)訪問節(jié)點 visit()</p><p>  (10)搜索迷宮路徑 mgpath()</p><p><b>  3.3 詳細(xì)設(shè)計</b></p><p>  實現(xiàn)概要設(shè)計中定義的所有數(shù)據(jù)類型及操作的偽代碼算法</p><p><

26、b>  節(jié)點類型和指針類型</b></p><p>  迷宮矩陣類型:int maze[M+2][N+2];為方便操作使其為全局變量</p><p>  迷宮中節(jié)點類型及隊列類型:struct point{int row,col,predecessor} que[512]</p><p><b>  迷宮的操作</b><

27、/p><p><b>  (1)手動生成迷宮</b></p><p>  void shoudong_maze(int m,int n)</p><p>  {定義i,j為循環(huán)變量</p><p><b>  for(i<=m)</b></p><p><b> 

28、 for(j<=n)</b></p><p>  輸入maze[i][j]的值</p><p><b>  }</b></p><p><b>  (2)自動生成迷宮</b></p><p>  void zidong_maze(int m,int n)</p>&l

29、t;p>  {定義i,j為循環(huán)變量</p><p><b>  for(i<=m)</b></p><p><b>  for(j<=n)</b></p><p>  maze[i][j]=rand()%2 //由于rand()產(chǎn)生的隨機(jī)數(shù)是從0到RAND_MAX,RAND_MAX是定義在stdlib

30、.h中的,其值至少為32767),要產(chǎn)生從X到Y(jié)的數(shù),只需要這樣寫:k=rand()%(Y-X+1)+X;</p><p><b>  }</b></p><p><b>  (3)打印迷宮圖形</b></p><p>  void print_maze(int m,int n)</p><p> 

31、 {用i,j循環(huán)變量,將maze[i][j]輸出 □、■}</p><p><b>  (4)打印迷宮路徑</b></p><p>  void result_maze(int m,int n)</p><p>  {用i,j循環(huán)變量,將maze[i][j]輸出 □、■、☆}</p><p><b>  (5)

32、搜索迷宮路徑</b></p><p> ?、倜詫m中隊列入隊操作</p><p>  void enqueue(struct point p)</p><p>  {將p放入隊尾,tail++}</p><p> ?、诿詫m中隊列出隊操作</p><p>  struct point dequeue(struc

33、t point p)</p><p>  {head++,返回que[head-1]}</p><p><b> ?、叟袛嚓犃惺欠駷榭?lt;/b></p><p>  int is_empty()</p><p>  {返回head==tail的值,當(dāng)隊列為空時,返回0}</p><p> ?、茉L問迷

34、宮矩陣中節(jié)點</p><p>  void visit(int row,int col,int maze[41][41])</p><p>  {建立新的隊列節(jié)點visit_point,將其值分別賦為row,col,head-1,maze[row][col]=2,表示該節(jié)點以被訪問過;調(diào)用enqueue(visit_point),將該節(jié)點入隊}</p><p>&l

35、t;b> ?、萋窂角蠼?lt;/b></p><p>  void mgpath(int maze[41][41],int m,int n)</p><p>  {先定義入口節(jié)點為struct point p={0,0,-1},從maze[0][0]開始訪問。如果入口處即為障礙,則此迷宮無解,返回0 ,程序結(jié)束。否則訪問入口節(jié)點,將入口節(jié)點標(biāo)記為訪問過maze[p.row][p

36、.col]=2,調(diào)用函數(shù)enqueue(p)將該節(jié)點入隊。</p><p>  判斷隊列是否為空,當(dāng)隊列不為空時,則運行以下操作:</p><p>  { 調(diào)用dequeue()函數(shù),將隊頭元素返回給p,</p><p>  如果p.row==m-1且p.col==n-1,即到達(dá)出口節(jié)點,即找到了路徑,結(jié)束</p><p>  如果p.col

37、+1<n且maze[p.row][p.col+1]==0,說明未到迷宮右邊界,且其右方有通路,則visit(p.row,p.col+1,maze),將右邊節(jié)點入隊標(biāo)記已訪問</p><p>  如果p.row+1<m且maze[p.row+1][p.col]==0,說明未到迷宮下邊界,且其下方有通路,則visit(p.row+1,p.col,maze),將下方節(jié)點入隊標(biāo)記已訪問</p>

38、<p>  如果p.col-1>0且maze[p.row][p.col-1]==0,說明未到迷宮左邊界,且其左方有通路,則visit(p.row,p.col-1,maze),將左方節(jié)點入隊標(biāo)記已訪問</p><p>  如果p.row-1>0且maze[p.row-1][p.col]==0,說明未到迷宮上邊界,且其上方有通路,則visit(p.row,p.col+1,maze),將上方節(jié)點入

39、隊標(biāo)記已訪問</p><p><b>  }</b></p><p>  訪問到出口(找到路徑)即p.row==m-1且p.col==n-1,則逆序?qū)⒙窂綐?biāo)記為3即maze[p.row][p.col]==3;</p><p>  while(p.predecessor!=-1)</p><p>  {p=queue[p.

40、predecessor]; maze[p.row][p.col]==3;}</p><p>  最后將路徑圖形打印出來。</p><p><b>  3.菜單選擇</b></p><p>  while(cycle!=(-1))</p><p>  ☆ 手動生成迷宮 請按:1</p><p>

41、  ☆ 自動生成迷宮 請按:2</p><p>  ☆ 退出 請按:3</p><p>  scanf("%d",&i);</p><p><b>  switch(i)</b></p><p>  { case 1:請輸入行列數(shù)(如果超出預(yù)設(shè)范圍則提示重新輸入) &l

42、t;/p><p>  shoudong_maze(m,n);</p><p>  print_maze(m,n);</p><p>  mgpath(maze,m,n);</p><p>  if(X!=0) result_maze(m,n);</p><p>  case 2 :請輸入行列數(shù)(如果超出預(yù)設(shè)范圍則提示重新輸

43、入)</p><p>  zidong_maze(m,n);</p><p>  print_maze(m,n);</p><p>  mgpath(maze,m,n);</p><p>  if(X!=0) result_maze(m,n);</p><p>  case 3:cycle=(-1); break;&l

44、t;/p><p><b>  }</b></p><p>  注:具體源代碼見附錄</p><p><b>  3.4 調(diào)試分析</b></p><p>  在調(diào)試過程中,首先使用的是棧進(jìn)行存儲,但是產(chǎn)生的路徑是多條或不是最短路徑,所以通過算法比較,改用此算法</p><p>&

45、lt;b>  3.5 測試結(jié)果</b></p><p>  1.手動輸入迷宮 </p><p><b>  2.自動生成迷宮</b></p><p><b>  3.6 參考文獻(xiàn)</b></p><p>  【1】 嚴(yán)蔚敏 吳偉民 《數(shù)據(jù)結(jié)構(gòu)(C語言版)》 清華大學(xué)

46、出版社, 2009年9月</p><p>  【2】 譚浩強(qiáng) 《C程序設(shè)計(第三版)》 清華大學(xué)出版社 2009年1月</p><p>  第三部分 課程設(shè)計總結(jié)</p><p>  通過這段時間的課程設(shè)計,本人對計算機(jī)的應(yīng)用,數(shù)據(jù)結(jié)構(gòu)的作用以及C語言的使用都有了更深的了解。尤其是C語言的進(jìn)步讓我深刻的感受到任何所學(xué)的知識都需要實踐,沒有實踐就無法真正理

47、解這些知識以及掌握它們,使其成為自己的財富。在理論學(xué)習(xí)和上機(jī)實踐的各個環(huán)節(jié)中,通過自主學(xué)習(xí)和請教老師,我收獲了不少。當(dāng)然也遇到不少的問題,也正是因為這些問題引發(fā)的思考給我?guī)Я耸斋@。從當(dāng)初不喜歡上機(jī)寫程序到現(xiàn)在能主動寫程序,從當(dāng)初拿著程序不只如何下手到現(xiàn)在知道如何分析問題,如何用專業(yè)知識解決實際問題的轉(zhuǎn)變,我發(fā)現(xiàn)無論是專業(yè)知識還是動手能力,自己都有很大程度的提高。在這段時間里,我對for、while等的循環(huán)函數(shù)用法更加熟悉,逐漸形成了較好

48、的編程習(xí)慣。在老師的指導(dǎo)幫助下,同學(xué)們課余時間的討論中,這些問題都一一得到了解決。在程序的調(diào)試能力上,無形中得到了許多的提高。例如:頭文件的使用,變量和數(shù)組的范圍問題,定義變量時出現(xiàn)的問題等等。</p><p>  在實際的上機(jī)操作過程中,不僅是讓我們了解數(shù)據(jù)結(jié)構(gòu)的理論知識,更重要的是培養(yǎng)解決實際問題的能力,所以相信通過此次實習(xí)可以提高我們分析設(shè)計能力和編程能力,為后續(xù)課程的學(xué)習(xí)及實踐打下良好的基礎(chǔ)。</p

49、><p>  在這次短短的課程實踐里,我們得到了xx老師的關(guān)心和幫助。她給了我們很多的信息,與我們一起探討問題,詢問我們遇到了哪些問題并耐心給予指導(dǎo)。當(dāng)我們遇到技術(shù)上難以解決的問題時,她就會指導(dǎo)我們解決問題,她把自己多年來積累的經(jīng)驗教授給我們,使我們順利地完成了課程實踐任務(wù)。時間過得真快,大學(xué)生活不知不覺就走過了一年,一年的大學(xué)學(xué)習(xí)和課程實踐階段的提高,使我們本身知識得到提高的同時,也增強(qiáng)了我們對未來工作的信心,我們

50、相信自己未來三年的學(xué)習(xí)更使我們有能力勝任將來的工作。</p><p><b>  附錄:</b></p><p>  #include"stdlib.h"</p><p>  #include"stdio.h"</p><p>  #define N 39</p>&

51、lt;p>  #define M 39</p><p><b>  int X;</b></p><p>  int maze[N+2][M+2];</p><p>  struct point{</p><p>  int row,col,predecessor;</p><p>  }q

52、ueue[512];</p><p>  int head=0,tail=0;</p><p>  void shoudong_maze(int m,int n){</p><p><b>  int i,j;</b></p><p>  printf("\n\n");</p><

53、p>  printf("請按行輸入迷宮,0表示通路,1表示障礙:\n\n");</p><p>  for(i=0;i<m;i++)</p><p>  for(j=0;j<n;j++)</p><p>  scanf("%d",&maze[i][j]);</p><p>&l

54、t;b>  }</b></p><p>  void zidong_maze(int m,int n){</p><p><b>  int i,j;</b></p><p>  printf("\n迷宮生成中……\n\n");</p><p>  system("paus

55、e");</p><p>  for(i=0;i<m;i++)</p><p>  for(j=0;j<n;j++)</p><p>  maze[i][j]=rand()%2;</p><p>  //由于rand()產(chǎn)生的隨機(jī)數(shù)是從0到RAND_MAX</p><p>  //RAND_MAX

56、是定義在stdlib.h中的,其值至少為32767)</p><p>  //要產(chǎn)生從X到Y(jié)的數(shù),只需要這樣寫:k=rand()%(Y-X+1)+X; </p><p><b>  }</b></p><p>  void print_maze(int m,int n){</p><p><b>  int i

57、,j;</b></p><p>  printf("\n迷宮生成結(jié)果如下:\n\n");</p><p>  printf("迷宮入口\n");</p><p>  printf("↓");</p><p>  for(i=0;i<m;i++)</p>

58、<p>  {printf("\n");</p><p>  for(j=0;j<n;j++) </p><p>  {if(maze[i][j]==0) printf("□");</p><p>  if(maze[i][j]==1) printf("■");}</p>&

59、lt;p><b>  }</b></p><p>  printf("→迷宮出口\n");</p><p><b>  }</b></p><p>  void result_maze(int m,int n){</p><p><b>  int i,j;<

60、;/b></p><p>  printf("迷宮通路(用☆表示)如下所示:\n\t");</p><p>  for(i=0;i<m;i++)</p><p>  {printf("\n");</p><p>  for(j=0;j<n;j++)</p><p&g

61、t;  {if(maze[i][j]==0||maze[i][j]==2) printf("□");</p><p>  if(maze[i][j]==1) printf("■");</p><p>  if(maze[i][j]==3) printf("☆");</p><p><b>  }&

62、lt;/b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void enqueue(struct point p){</p><p>  queue[tail]=p;</p><p><b>  tail

63、++;</b></p><p><b>  }</b></p><p>  struct point dequeue(){</p><p><b>  head++;</b></p><p>  return queue[head-1];</p><p><

64、b>  }</b></p><p>  int is_empty(){</p><p>  return head==tail;</p><p><b>  }</b></p><p>  void visit(int row,int col,int maze[41][41]){</p>

65、<p>  struct point visit_point={row,col,head-1};</p><p>  maze[row][col]=2;</p><p>  enqueue(visit_point);</p><p><b>  }</b></p><p>  int mgpath(int ma

66、ze[41][41],int m,int n){</p><p><b>  X=1;</b></p><p>  struct point p={0,0,-1};</p><p>  if(maze[p.row][p.col]==1)</p><p>  {printf("\n================

67、===============================\n");</p><p>  printf("此迷宮無解\n\n");X=0;return 0;}</p><p>  maze[p.row][p.col]=2;</p><p>  enqueue(p);</p><p>  while(!is_e

68、mpty())</p><p>  {p=dequeue();</p><p>  if((p.row==m-1)&&(p.col==n-1)) break;</p><p>  if((p.col+1<n)&&(maze[p.row][p.col+1]==0)) visit(p.row,p.col+1,maze);</p

69、><p>  if((p.row+1<m)&&(maze[p.row+1][p.col]==0)) visit(p.row+1,p.col,maze);</p><p>  if((p.col-1>=0)&&(maze[p.row][p.col-1]==0)) visit(p.row,p.col-1,maze);</p><p&g

70、t;  if((p.row-1>=0)&&(maze[p.row-1][p.col]==0)) visit(p.row-1,p.col,maze);</p><p><b>  }</b></p><p>  if(p.row==m-1&&p.col==n-1)</p><p>  {printf(&quo

71、t;\n==================================================================\n");</p><p>  printf("迷宮路徑為:\n");</p><p>  printf("(%d,%d)\n",p.row,p.col);</p><p>  

72、maze[p.row][p.col]=3;</p><p>  while(p.predecessor!=-1)</p><p>  {p=queue[p.predecessor];</p><p>  printf("(%d,%d)\n",p.row,p.col);</p><p>  maze[p.row][p.col

73、]=3;</p><p><b>  }</b></p><p><b>  }</b></p><p>  else {printf("\n=============================================================\n");</p><

74、;p>  printf("此迷宮無解!\n\n");X=0;}</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  void main()</p><p>  {int i,m,n,cycle=0;</p

75、><p>  while(cycle!=(-1))</p><p><b>  {</b></p><p>  printf("********************************************************************************\n");</p><

76、p>  printf(" 歡迎進(jìn)入迷宮求解系統(tǒng)\n");</p><p>  printf(" 設(shè)計者:賴海濤(信科091)\n");</p><p>  printf("**

77、******************************************************************************\n");</p><p>  printf(" ☆ 手動生成迷宮 請按:1\n");</p><p>  printf("

78、 ☆ 自動生成迷宮 請按:2\n");</p><p>  printf(" ☆ 退出 請按:3\n\n");</p><p>  printf("**********************************************

79、**********************************\n");</p><p>  printf("\n");</p><p>  printf("請選擇你的操作:\n");</p><p>  scanf("%d",&i);</p><p><

80、;b>  switch(i)</b></p><p>  {case 1:printf("\n請輸入行數(shù):");scanf("%d",&m);</p><p>  printf("\n");</p><p>  printf("請輸入列數(shù):");scanf(&q

81、uot;%d",&n);</p><p>  while((m<=0||m>39)||(n<=0||n>39))</p><p>  {printf("\n抱歉,你輸入的行列數(shù)超出預(yù)設(shè)范圍(0-39,0-39),請重新輸入:\n\n");</p><p>  printf("請輸入行數(shù):&quo

82、t;);scanf("%d",&m);</p><p>  printf("\n");</p><p>  printf("請輸入列數(shù):");scanf("%d",&n);</p><p><b>  }</b></p><p&g

83、t;  shoudong_maze(m,n);</p><p>  print_maze(m,n);</p><p>  mgpath(maze,m,n);</p><p>  if(X!=0) result_maze(m,n);</p><p>  printf("\n\nPress Enter Contiue!\n")

84、;getchar();while(getchar()!='\n');break;</p><p>  case 2:printf("\n請輸入行數(shù):");scanf("%d",&m);</p><p>  printf("\n");</p><p>  printf("請輸

85、入列數(shù):");scanf("%d",&n);</p><p>  while((m<=0||m>39)||(n<=0||n>39))</p><p>  {printf("\n抱歉,你輸入的行列數(shù)超出預(yù)設(shè)范圍(0-39,0-39),請重新輸入:\n\n");</p><p>  pri

86、ntf("請輸入行數(shù):");scanf("%d",&m);</p><p>  printf("\n");</p><p>  printf("請輸入列數(shù):");scanf("%d",&n);</p><p><b>  }</b>

87、;</p><p>  zidong_maze(m,n);</p><p>  print_maze(m,n);</p><p>  mgpath(maze,m,n);</p><p>  if(X!=0) result_maze(m,n);</p><p>  printf("\n\nPress Enter

88、 Contiue!\n");getchar();while(getchar()!='\n');break;</p><p>  case 3:cycle=(-1);break;</p><p>  default:printf("\n");printf("你的輸入有誤!\n");</p><p>  

89、printf("\nPress Enter Contiue!\n");getchar();while(getchar()!='\n');break;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b>

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論