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

下載本文檔

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

文檔簡介

1、<p>  數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告</p><p>  題 目: 迷宮問題</p><p>  院系名稱: 計(jì)算機(jī)學(xué)院</p><p>  專業(yè)名稱: 軟件工程</p><p><b>  一. 設(shè)計(jì)目的</b></p><p>  1.

2、熟悉C語言程序的編輯、編譯鏈接和運(yùn)行的過程,能夠熟練地編輯、編譯及調(diào)試程序。</p><p>  2.掌握文件和文件指針的概念以及文件的定義方法,學(xué)會(huì)熟練使用文件打開、關(guān)閉、讀、寫 等基本操作。</p><p>  3.熟練掌握結(jié)構(gòu)體、鏈表、指針的使用,及函數(shù)間的調(diào)用。</p><p>  4.能夠熟練運(yùn)用所學(xué)棧的相關(guān)知識(shí)及操作,順利完成題目的要求。</p&g

3、t;<p><b>  二. 設(shè)計(jì)內(nèi)容</b></p><p>  迷宮是實(shí)驗(yàn)心理學(xué)中一個(gè)古典問題。用計(jì)算機(jī)解迷宮路徑的程序,就是仿照人走迷宮。計(jì)算機(jī)解迷宮時(shí),通常用的是"窮舉求解"的方法,即從入口出發(fā),順某一方向向前探索,若能走通,則繼續(xù)往前走;否則沿原路退回,換一個(gè)方向再繼續(xù)探索,直至所有可能的通路都探索到為止。

4、 </p><p>  1.功能與數(shù)據(jù)需求 </p><p><b>  迷宮求解問題描述:</b></p><p>  以一個(gè)M×N的矩陣表示迷宮,0和1分別表示迷宮中的通路和障礙。設(shè)計(jì)一

5、個(gè)程序,對(duì)任意設(shè)定的迷宮,求出一條從入口到出口的通路,或得出沒有通路的結(jié)論。</p><p>  1.1 題目要求的功能 </p><p><b> ?。?)基本要求:</b></p><p>  首先實(shí)現(xiàn)一個(gè)以鏈表作存儲(chǔ)結(jié)構(gòu)的棧類型,然后編寫一個(gè)求解迷宮的非遞歸程序。求得的通路以二元組(i,j)的形式輸出,其中:(i,j)指迷宮中對(duì)應(yīng)的坐標(biāo)

6、。 </p><p><b> ?。?)測試數(shù)據(jù):</b></p><p>  左上角(1,1)為入口,右下角(9,8)為出口。</p><p>  左上角(1,1)為入口,右上角(1,8)為出口。</p><p><b>  如下圖所示:</b></p><p><b

7、>  1.2 擴(kuò)展功能</b></p><p> ?。?)編寫非遞歸形式的算法,求得迷宮中所有可能的通路;</p><p> ?。?)以方陣形式輸出迷宮及其通路</p><p><b>  2.界面需求</b></p><p> ?。?)在菜單中選擇要執(zhí)行的操作</p><p>

8、<b> ?。?)輸出方陣迷宮</b></p><p> ?。?)用戶自己輸入迷宮起始位置</p><p> ?。?)輸出所走的迷宮路徑</p><p> ?。?)輸出方陣路徑,并保存到文件中</p><p>  3.開發(fā)環(huán)境與運(yùn)行需求</p><p>  Microsoft Visual C++

9、6.0</p><p><b>  Ubuntu </b></p><p><b>  三.概要設(shè)計(jì)</b></p><p><b>  1.功能模塊圖;</b></p><p><b>  本程序包含三個(gè)模塊</b></p><p&g

10、t; ?。?)主程序模塊:void main()</p><p><b> ?。?lt;/b></p><p><b>  初始化;</b></p><p><b>  do{</b></p><p><b>  接受命令;</b></p>&

11、lt;p><b>  處理命令;</b></p><p> ?。齱hile(命令!=“退出”);</p><p><b> ?。?lt;/b></p><p> ?。?)棧模塊——實(shí)現(xiàn)棧抽象數(shù)據(jù)類型</p><p>  迷宮模塊——實(shí)現(xiàn)迷宮抽象數(shù)據(jù)類型</p><p>  各

12、個(gè)模塊詳細(xì)的功能描述。</p><p> ?。?)菜單:從菜單中選擇要執(zhí)行的操作</p><p>  (2)文件模塊:實(shí)現(xiàn)文件的各項(xiàng)基本操作</p><p>  a)打開文件b)關(guān)閉文件</p><p>  c)從文件讀信息d)向文件中寫入內(nèi)容</p><p> ?。?)棧模塊:實(shí)現(xiàn)棧的各項(xiàng)基本操作&

13、lt;/p><p>  a)初始化棧b)入棧</p><p>  c)出棧d)取棧頂元素</p><p>  (4)迷宮模塊:求解迷宮問題</p><p>  a)顯示迷宮b)獲取迷宮路徑</p><p>  c)判斷當(dāng)前路徑是否走過d)獲得下一個(gè)可走的位置</p><

14、;p>  e)獲得東面,南面,西面,北面相鄰的位置</p><p><b>  詳細(xì)設(shè)計(jì)</b></p><p>  1.功能函數(shù)的調(diào)用關(guān)系圖</p><p>  2.各功能函數(shù)的數(shù)據(jù)流程圖</p><p><b>  獲得迷宮路徑函數(shù)</b></p><p>  do

15、 while (cur.x != chukou[0] || cur.y != chukou[1])</p><p>  是 否</p><p><b>  else if</b></p><p><b>  if</b&g

16、t;</p><p>  獲得下一個(gè)可通行的位置</p><p>  if else if</p><p>  else if else if</p><p><b>  3.重點(diǎn)設(shè)計(jì)及編碼</b></p><p>  獲得

17、迷宮路徑的函數(shù):</p><p>  int GetMazePath()</p><p><b>  {</b></p><p>  MStackElem start,cur; </p><p>  start.x = rukou[0];</p><p>  start.y = rukou[1]

18、;</p><p>  start.val = Maze[rukou[0]][rukou[1]];</p><p>  cur = start; </p><p><b>  do </b></p><p>  { <

19、;/p><p>  if (UnPass(path,cur))</p><p><b>  {</b></p><p>  Push(&realPath,cur);</p><p>  Push(&path,cur);</p><p>  cur = GetNext(cur);&l

20、t;/p><p>  if (cur.x == chukou[0] && cur.y == chukou[1])</p><p><b>  { </b></p><p>  Push(&realPath,cur);</p><p>  Push(&path,cur);</p>

21、;<p><b>  return 1;</b></p><p><b>  }</b></p><p>  else if(cur.val == -1)</p><p><b>  {</b></p><p>  Pop(&realPath);&l

22、t;/p><p>  cur = GetTop(&realPath);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {<

23、/b></p><p>  cur = GetNext(cur);</p><p>  if (cur.val == -1) </p><p><b>  {</b></p><p>  Pop(&realPath);</p><p>  cur = GetTop(&re

24、alPath);</p><p><b>  }</b></p><p><b>  }</b></p><p>  } while (cur.x != chukou[0] || cur.y != chukou[1]);</p><p><b>  return 0;</b>

25、</p><p><b>  }</b></p><p>  五.測試數(shù)據(jù)及運(yùn)行結(jié)果</p><p>  1.正常測試數(shù)據(jù)和運(yùn)行結(jié)果</p><p>  2.異常測試數(shù)據(jù)及運(yùn)行結(jié)果</p><p>  六.調(diào)試情況,設(shè)計(jì)技巧及體會(huì)</p><p><b>  1.

26、改進(jìn)方案</b></p><p>  在迷宮問題中,由于走的方向順序不同,存在著多條路徑的結(jié)果。因此就出現(xiàn)了一個(gè)最大的問題,哪條路徑最短,即求最短路徑。</p><p>  由于時(shí)間有限和難度問題,我沒能及時(shí)解決這個(gè)問題,這也是在這次的迷宮課程設(shè)計(jì)中,我唯一的不足之處。不過我并沒有放棄,課程設(shè)計(jì)結(jié)束后,我還會(huì)繼續(xù)努力,解決掉這個(gè)問題。在以后的生活中,我也會(huì)不斷督促自己,提高編程

27、能力。</p><p><b>  2.體會(huì)</b></p><p>  剛開始,頭腦里沒有任何思路,不知道如何下手,經(jīng)過仔細(xì)研讀課本和上網(wǎng)查資料后,終于有了思緒。先將整個(gè)程序劃分為三個(gè)大模塊:主模塊,棧模塊和迷宮模塊。然后再依次實(shí)現(xiàn)每個(gè)大模塊中的小操作。最后將所有的程序拼接起來,進(jìn)行調(diào)試。</p><p>  我覺得所有模塊中最難編的就是查找

28、迷宮路徑函數(shù),經(jīng)過苦思冥想,再加上老師和同學(xué)的幫助,總算做出來了,但是非常復(fù)雜。在編譯的過程中總會(huì)出現(xiàn)五花八門的錯(cuò)誤,比如:從文件里讀不出信息,又或者是存不進(jìn)去文件,或者是亂碼等。后來才發(fā)現(xiàn)原來是源文件中存的信息類型和程序中定義的類型不匹配,經(jīng)過改正之后果然正確了。改正完后,當(dāng)把所有的小塊連接在一起時(shí),雖然沒有錯(cuò)誤,但是總有許多警告語句,運(yùn)行的結(jié)果也不盡人意。通過上網(wǎng)查資料后,發(fā)現(xiàn)這都是一些格式問題??磥砭幊谈袷胶苤匾?!經(jīng)過兩個(gè)星期的

29、上機(jī)實(shí)踐學(xué)習(xí),我才發(fā)現(xiàn)我的C語言上機(jī)實(shí)踐能力還有待加強(qiáng),有待進(jìn)步。以后不但要重視課本與習(xí)題,更要重視上機(jī)實(shí)踐。</p><p><b>  七.參考文獻(xiàn)</b></p><p>  1. 耿國華主編,《數(shù)據(jù)結(jié)構(gòu)——C語言描述》,高等教育出版社,2005年</p><p>  2. 陳銳,《數(shù)據(jù)結(jié)構(gòu)(C語言版)》,清華大學(xué)出版社 2012年<

30、;/p><p><b>  八.附錄</b></p><p>  #include <stdio.h> </p><p>  #include <stdlib.h></p><p>  #include <string.h></p><p>  #define M

31、11//迷宮行數(shù)</p><p>  #define N 10//迷宮列數(shù)</p><p>  #define STACK_INIT_SIZE 100</p><p>  #define STACKINCREMENT 10</p><p>  char Maze[M][N]={0};//迷宮</p><p>  

32、char s[M][N]={0};//迷宮路線圖</p><p>  int rukou[2],chukou[2];</p><p><b>  //定義棧元素類型</b></p><p>  typedef struct</p><p><b>  {</b></p><p

33、>  int x;//x坐標(biāo)</p><p>  int y;//y坐標(biāo)</p><p>  char val;//Maze[x][y]的值</p><p>  }MStackElem;</p><p><b>  //定義棧</b></p><p>  typedef struct&

34、lt;/p><p><b>  {</b></p><p>  MStackElem * base;</p><p>  MStackElem * top;</p><p>  int StackSize;</p><p><b>  }MStack;</b></p>

35、<p><b>  //初始化棧</b></p><p>  InitStack(MStack *S) </p><p><b>  {</b></p><p>  S->base = (MStackElem *)malloc(STACK_INIT_SIZE * sizeof(MStackElem));

36、</p><p>  if (!S->base)</p><p><b>  {</b></p><p>  printf("初始化棧失敗!\n");</p><p>  exit(-1);//存儲(chǔ)分配失敗</p><p><b>  }</b>&

37、lt;/p><p>  S->top = S->base;</p><p>  S->StackSize = STACK_INIT_SIZE;</p><p><b>  }</b></p><p><b>  //入棧</b></p><p>  Push(M

38、Stack *S,MStackElem e) </p><p><b>  {</b></p><p>  //向棧中添加元素前先判斷棧是否還有空間容納新元素</p><p>  if (S->top - S->base >= S->StackSize)//棧滿,追加元素</p><p><

39、;b>  { </b></p><p>  S->base = (MStackElem *)realloc(S->base, (STACK_INIT_SIZE+STACKINCREMENT) * sizeof(MStackElem));</p><p>  if (!S->base)</p><p><b>  {<

40、;/b></p><p>  printf("空間不足,入棧失敗!\n");</p><p>  exit(-1);//存儲(chǔ)分配失敗</p><p><b>  }</b></p><p>  S->top = S->base + S->StackSize; //因?yàn)槭侵匦路?/p>

41、配了空間,所以base的值其實(shí)已經(jīng)改變,所以top的值也就相應(yīng)的改變,才能指向新的迷宮棧</p><p>  S->StackSize += STACKINCREMENT;</p><p><b>  } </b></p><p>  *(S->top++) = e;//將新元素加到棧頂</p><p>&

42、lt;b>  }</b></p><p><b>  //獲得棧頂元素</b></p><p>  MStackElem GetTop(MStack *S) </p><p><b>  {</b></p><p>  if (S->top == S->base)<

43、;/p><p><b>  {</b></p><p>  printf("\n對(duì)不起,沒有出路!\n\n");</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p><b&g

44、t;  else</b></p><p>  return *(S->top - 1);</p><p><b>  }</b></p><p><b>  //出棧</b></p><p>  Pop(MStack *S)</p><p><b>

45、;  {</b></p><p>  //若棧不為空,則刪除s的棧頂元素</p><p>  if (S->top == S->base)</p><p><b>  {</b></p><p>  printf("棧為空,出棧失敗!\n");</p><p

46、><b>  exit(0);</b></p><p><b>  }</b></p><p><b>  else </b></p><p>  --(S->top);</p><p><b>  }</b></p><p

47、>  MStack realPath,path;//構(gòu)造兩個(gè)棧,一個(gè)用來保存探索中的全部路徑,一個(gè)用來保存有效路徑</p><p>  //判斷當(dāng)前位置是否走過</p><p>  int UnPass(MStack path,MStackElem cur)//這里不能傳path的地址,否則在遍歷過程中它的top值就被改了</p><p><b>

48、;  {</b></p><p>  int flag = 1;//未走過</p><p>  while(path.top != path.base)</p><p><b>  {</b></p><p>  MStackElem e = *(path.top - 1);</p><

49、p>  if (e.x == cur.x&& e.y == cur.y)</p><p>  flag = 0;//曾走過</p><p>  (path.top)--;//每循環(huán)一次令頭指針下移一個(gè)位置</p><p><b>  }</b></p><p>  return flag;<

50、;/p><p><b>  }</b></p><p>  //獲得東面(即右邊)相鄰的位置</p><p>  MStackElem GetEast(MStackElem cur)</p><p><b>  {</b></p><p>  if(cur.y != N-2)/

51、/當(dāng)y==N-2時(shí)已到了迷宮右邊界,不能再向東(右)行了</p><p><b>  { </b></p><p>  cur.y += 1;</p><p>  cur.val = Maze[cur.x][cur.y];</p><p><b>  } </b></p><p

52、>  return cur;//當(dāng)y==N-2時(shí)返回的是它本身 </p><p><b>  } </b></p><p>  //獲得南面(即下邊)相鄰的位置</p><p>  MStackElem GetSouth(MStackElem cur)</p><p><b>  {</b>

53、</p><p>  if(cur.x != M-2)//當(dāng)x==M-2時(shí)已到了迷宮下邊界,不能再向南(下)行了</p><p><b>  {</b></p><p>  cur.x += 1;</p><p>  cur.val = Maze[cur.x][cur.y];</p><p>

54、<b>  }</b></p><p>  return cur;//當(dāng)x==M-2時(shí)返回的是它本身</p><p><b>  }</b></p><p>  //獲得西面(即左邊)相鄰的位置</p><p>  MStackElem GetWest(MStackElem cur)</p&

55、gt;<p><b>  {</b></p><p>  if(cur.y != 1)//當(dāng)y==1時(shí)已到了迷宮左邊界,不能再向西(左)行了</p><p><b>  {</b></p><p>  cur.y -= 1;</p><p>  cur.val = Maze[cur

56、.x][cur.y];</p><p><b>  }</b></p><p>  return cur;//當(dāng)y==1時(shí)返回的是它本身</p><p><b>  }</b></p><p>  //獲得北面(即上邊)相鄰的位置</p><p>  MStackElem

57、GetNorth(MStackElem cur) </p><p><b>  {</b></p><p>  if(cur.x != 1)//當(dāng)cur.x==1時(shí)表示在迷宮的上邊界,不能再向北(上)行了</p><p><b>  { </b></p><p>  cur.x -= 1;<

58、;/p><p>  cur.val = Maze[cur.x][cur.y];</p><p><b>  }</b></p><p>  return cur;//當(dāng)cur.x==1時(shí)返回的還是它本身</p><p><b>  }</b></p><p>  //獲得下一個(gè)

59、可通行的位置,按東南西北(即順時(shí)針)的方向試探</p><p>  MStackElem GetNext(MStackElem cur) </p><p><b>  {</b></p><p>  MStackElem next;</p><p>  next.x = next.y=next.val = -1;<

60、/p><p>  if(GetEast(cur).val == ' ' && UnPass(path,GetEast(cur))) </p><p>  next = GetEast(cur);</p><p>  else if(GetSouth(cur).val == ' ' && UnPass(pat

61、h,GetSouth(cur))) </p><p>  next = GetSouth(cur);</p><p>  else if(GetWest(cur).val == ' ' && UnPass(path,GetWest(cur))) </p><p>  next = GetWest(cur);</p>&l

62、t;p>  else if(GetNorth(cur).val == ' ' && UnPass(path,GetNorth(cur))) </p><p>  next = GetNorth(cur); </p><p>  return next;//如果當(dāng)前位置的四面或?yàn)閴蛞炎哌^,則返回的next的val值為-1</p><

63、;p><b>  }</b></p><p>  //獲得迷宮路徑的函數(shù)</p><p>  int GetMazePath()</p><p><b>  {</b></p><p>  MStackElem start,cur; </p><p>  start.

64、x = rukou[0];</p><p>  start.y = rukou[1];</p><p>  start.val = Maze[rukou[0]][rukou[1]];//入口坐標(biāo)的值</p><p>  cur = start; //設(shè)定當(dāng)前位置為"入口位置"</p><p><b>  do

65、</b></p><p>  { </p><p>  if (UnPass(path,cur))//如果當(dāng)前位置未曾走到過</p><p><b>  {</b></p><p>  Push(&r

66、ealPath,cur);</p><p>  Push(&path,cur);</p><p>  cur = GetNext(cur);</p><p>  if (cur.x == chukou[0] && cur.y == chukou[1])//到達(dá)出口</p><p><b>  { <

67、/b></p><p>  Push(&realPath,cur);//把出口結(jié)點(diǎn)放入路徑中</p><p>  Push(&path,cur);</p><p><b>  return 1;</b></p><p><b>  }</b></p><p

68、>  else if(cur.val == -1)//當(dāng)前位置的四面都為墻</p><p><b>  {</b></p><p>  Pop(&realPath);//刪除真實(shí)路徑的棧頂元素</p><p>  cur = GetTop(&realPath);//令cur指向棧頂元素</p><

69、;p><b>  }</b></p><p><b>  }</b></p><p>  else//如果當(dāng)前位置已經(jīng)走過,說明原來測試的方向不對(duì),現(xiàn)在嘗試其它方向</p><p><b>  {</b></p><p>  cur = GetNext(cur);<

70、;/p><p>  if (cur.val == -1) </p><p><b>  {</b></p><p>  Pop(&realPath);//仍不通,刪除真實(shí)路徑的棧頂元素</p><p>  cur = GetTop(&realPath);//令cur指向棧頂元素</p>&

71、lt;p><b>  }</b></p><p><b>  }</b></p><p>  } while (cur.x != chukou[0] || cur.y != chukou[1]);</p><p><b>  return 0;</b></p><p>&

72、lt;b>  }</b></p><p><b>  //輸出迷宮路徑</b></p><p>  PrintMazePath(MStack *S)//為了安全,這里不傳MStack的地址,以防在遍歷的過程中把它們的top或base的值也修改了 </p><p><b>  {</b></p&g

73、t;<p>  MStackElem e;</p><p><b>  int i,j;</b></p><p>  for(i=0;i<M;i++)</p><p>  for(j=0;j<N;j++)</p><p>  s[i][j]=Maze[i][j];</p><

74、p>  while (S->base < (S->top-1)) </p><p><b>  {</b></p><p>  e = *(S->base);//先指向棧底元素,以后依次向上增1</p><p>  s[e.x][e.y]='.';</p><p>  pr

75、intf("(%d,%d) -----> ",e.x,e.y);</p><p>  (S->base)++;</p><p><b>  }</b></p><p>  //最后一個(gè)結(jié)點(diǎn)沒有后繼,所以不再輸出"------>" </p><p>  e = *(

76、S->base);</p><p>  s[e.x][e.y]='.';</p><p>  printf("(%d,%d)",e.x,e.y);</p><p><b>  }</b></p><p>  //打開文件,獲取迷宮</p><p>  Op

77、enFile() </p><p><b>  { </b></p><p><b>  FILE *fp;</b></p><p>  int i,j,c;</p><p>  system("cls");</p><p>  if((fp=fopen(

78、"in.txt","rt"))==NULL)//打開迷宮文件in.txt</p><p><b>  {</b></p><p>  printf("打開文件失??!\n");</p><p><b>  exit(1);</b></p><p

79、><b>  }</b></p><p>  for(i=0;i<M;i++)//將文件中的迷宮存放到Maze[][]中</p><p>  {for(j=0;j<N;j++)</p><p>  fscanf(fp,"%c",&Maze[i][j]); </p><p>

80、;  fscanf(fp,"%c",&c);//換行</p><p><b>  }</b></p><p>  fclose(fp);</p><p><b>  } </b></p><p><b>  //保存迷宮路線圖</b></p&

81、gt;<p>  SaveFile()</p><p><b>  {</b></p><p><b>  FILE *fp;</b></p><p><b>  int i,j;</b></p><p>  char str[M][N+1];</p>

82、;<p>  for(i=0;i<M;i++)</p><p><b>  {</b></p><p>  for(j=0;j<N;j++)</p><p>  str[i][j]=s[i][j];</p><p>  str[i][j]='\n';</p><

83、;p><b>  }</b></p><p>  str[M-1][N]='\0';//結(jié)束符</p><p>  if((fp=fopen("out.txt","wt"))==NULL)</p><p><b>  { </b></p><

84、;p>  printf("存儲(chǔ)文件失敗!\n");</p><p><b>  exit(1);</b></p><p><b>  }</b></p><p>  fputs(str,fp);//保存文件</p><p>  printf("\n迷宮文件保存

85、成功,文件名為: out.txt。\n\n");</p><p>  system("pause");</p><p>  fclose(fp);</p><p><b>  }</b></p><p><b>  //輸出迷宮</b></p><p

86、><b>  Print1()</b></p><p><b>  {</b></p><p><b>  int m,n;</b></p><p>  printf("\n迷宮('#'代表墻即不通,' '代表通路即可通過)\n\n");<

87、;/p><p>  for(m=0;m<M;m++) </p><p><b>  {</b></p><p>  printf("\t\t");</p><p>  for(n=0;n<N;n++) </p><p>  printf("%c ",

88、Maze[m][n]);</p><p>  printf("\n");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //輸出迷宮路線圖</b></p><p><

89、b>  Print2()</b></p><p><b>  {</b></p><p><b>  int m,n;</b></p><p>  printf("\n迷宮路線如下:\n'#'代表不通即墻,' '代表通路即可通過,'.'代表行走路線

90、,'>'代表入口,'<'代表出口.\n\n");</p><p>  s[rukou[0]][rukou[1]]='>';//入口標(biāo)志</p><p>  s[chukou[0]][chukou[1]]='<';//出口標(biāo)志</p><p>  for(m=0;m&

91、lt;M;m++)</p><p><b>  {</b></p><p>  printf("\t\t");</p><p>  for(n=0;n<N;n++) </p><p>  printf("%c ",s[m][n]);</p><p>

92、  printf("\n");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //菜單函數(shù)</b></p><p><b>  Menu()</b></p>&

93、lt;p><b>  {</b></p><p>  printf("\t\t******************************************\n"); </p><p>  printf("\t\t*** 歡迎進(jìn)入課程設(shè)計(jì) ***\n"

94、);</p><p>  printf("\t\t*** 迷宮求解程序 ***\n");</p><p>  printf("\t\t*** ***\n");</p><p>  printf("\t\t

95、*** 1.顯示迷宮 ***\n");</p><p>  printf("\t\t*** 2.進(jìn)入迷宮 ***\n");</p><p>  printf("\t\t*** 3.打印迷宮 ***\n&quo

96、t;);</p><p>  printf("\t\t*** 0.退出迷宮 ***\n");</p><p>  printf("\t\t******************************************\n");</p><p><b>  }<

97、;/b></p><p><b>  Flower()</b></p><p><b>  {</b></p><p>  printf("\t {@}\n");</p><p>  printf("\t {@} * {@}\n"

98、;);</p><p>  printf("\t {@} * {@} * {@}\n");</p><p>  printf("\t{@}* {@} * {@} * {@}\n");</p><p>  printf("\t \\ {@} * {@} * {@} \/\n");</p>&

99、lt;p>  printf("\t \\ \\ \\ l \/ \/ \/\n");</p><p>  printf("\t \\\\ \\ Y \/ \/\/\n");</p><p>  printf("\t \\\\ l \/\/\n");</p><p>  pri

100、ntf("\t \\\\Y\/\/\n");</p><p>  printf("\t >=<\n");</p><p>  printf("\t \/\/*\\\\\n\n");</p><p><b>  }</b></

101、p><p><b>  //主函數(shù)</b></p><p>  int main() </p><p><b>  { </b></p><p>  int choice;//x[]用來輸入迷宮入口坐標(biāo),y[]用來輸入迷宮出口坐標(biāo)</p><p>  OpenFile();

102、//打開迷宮文件</p><p><b>  do</b></p><p><b>  {</b></p><p>  system("cls");//清屏</p><p>  Menu();//調(diào)用菜單函數(shù)</p><p>  printf(&quo

103、t;\n請輸入您的選擇: ");</p><p>  scanf("%d",&choice);</p><p>  switch(choice)</p><p><b>  {</b></p><p><b>  case 1:</b></p>&

104、lt;p>  system("cls");</p><p>  Print1();//顯示迷宮</p><p>  printf("\n");</p><p>  system("pause");</p><p><b>  break;</b><

105、/p><p>  case 2://進(jìn)入迷宮</p><p>  system("cls");</p><p>  printf("\n請輸入入口坐標(biāo): "); </p><p>  scanf("%d %d",&rukou[0],&rukou[1]);//迷宮入口

106、坐標(biāo) </p><p>  printf("\n請輸入出口坐標(biāo): "); </p><p>  scanf("%d %d",&chukou[0],&chukou[1]);//迷宮出口坐標(biāo)</p><p>  if(rukou[0]>M-2||rukou[1]>N-2||chukou[0]>

107、;M-2||chukou[1]>N-2||rukou[0]<0||rukou[1]<0||chukou[0]<0||chukou[1]<0) </p><p>  printf("輸入的入口或出口坐標(biāo)錯(cuò)誤!\n");//判斷輸入坐標(biāo)是否正確</p><p><b>  else </b></p><

108、;p><b>  { </b></p><p>  InitStack(&realPath);</p><p>  InitStack(&path); </p><p>  GetMazePath();</p><p>  printf("\n迷宮路徑為:\n\n");<

109、/p><p>  PrintMazePath(&realPath);</p><p>  getchar();</p><p><b>  } </b></p><p>  printf("\n\n");</p><p>  system("pause"

110、);</p><p>  system("cls");</p><p><b>  break;</b></p><p><b>  case 3:</b></p><p>  system("cls");</p><p>  Prin

111、t2();//顯示迷宮路線圖</p><p>  printf("\n");</p><p>  SaveFile();//保存迷宮路線圖</p><p><b>  break;</b></p><p>  case 0://退出</p><p>  system(&

112、quot;cls");</p><p>  printf("\n謝謝您的使用,再見!\n\n");</p><p><b>  Flower();</b></p><p><b>  break;</b></p><p><b>  default:</

113、b></p><p>  system("cls");</p><p>  printf("\n抱歉,您輸入錯(cuò)誤!\n請重新輸入哦!\n\n");</p><p>  system("pause");</p><p><b>  }</b></p&g

溫馨提示

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

評(píng)論

0/150

提交評(píng)論