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

下載本文檔

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

文檔簡介

1、<p>  計算機科學(xué)與技術(shù)學(xué)院</p><p>  課 程 設(shè) 計 報 告 </p><p> ?。?2007 ~ 2008 學(xué)年度 第 1學(xué)期 )</p><p><b>  1.實驗?zāi)康募耙?lt;/b></p><p>  1)、設(shè)計目標(biāo)(問題描述)</p><p>&

2、lt;b>  迷宮問題</b></p><p>  問題描述:迷宮實驗是取自心理學(xué)的一個古典實驗。在該實驗中,把一只老鼠從一個無頂大盒子的門放入,在盒中設(shè)置了許多墻,對行進方向形成了多處阻擋。盒子僅有一個出口,在出口處放置一塊奶酪,吸引老鼠在迷宮中尋找道路以到達出口。對同一只老鼠重復(fù)進行上述實驗,一直到老鼠從入口到出口,而不走錯一步。老鼠經(jīng)多次試驗終于得到它學(xué)習(xí)走迷宮的路線。</p>

3、<p><b>  2)、功能設(shè)計要求</b></p><p>  編寫一個程序求解迷宮問題。迷宮由m行n列的二維數(shù)組設(shè)置,0表示無障礙,1表示有障礙。設(shè)入口為(1,1),出口為(m,n),每次只能從一個無障礙單元移到周圍四個方向上任一無障礙單元。編程實現(xiàn)對任意設(shè)定的迷宮,求出一條從入口到出口的通路,或得出沒有通路的結(jié)論。</p><p>  算法輸入:

4、代表迷宮入口的坐標(biāo)</p><p>  算法輸出:穿過迷宮的結(jié)果。</p><p>  算法要點:創(chuàng)建迷宮,試探法查找路徑,輸出解</p><p>  3)、實驗?zāi)康?1、加深對棧特性理解,以便在解決實際問題中靈活運用它們 2、加深對棧操作實際算法的理解 3、進一步熟悉掌握鏈表的操作; 4、掌握指針的應(yīng)用 5、更進一步掌握有關(guān)

5、類的操作                 </p><p>  4)、 需求分析 1、本程序?qū)崿F(xiàn)迷宮的探索過程. 以用戶和計算機對話的方式,即在計算機終端上顯示“提示信息”之后,由用戶在鍵盤上輸入演示程序中規(guī)定的運算命令,然后

6、程序就探索路徑并輸出路徑。 2、本演示程序中,輸入形式以“回車符”為結(jié)束標(biāo)志,且允許出現(xiàn)重復(fù)字符。 3、利用二維指針實現(xiàn)迷宮位置的存儲,并用棧存貯探索路徑,每個結(jié)點含三個整形變量。輸入的形式以回車結(jié)束。 4、本程序中,用戶可以讀去文件里的迷宮,也可自己重新輸入迷宮,而且用戶可以輸入任意大小的迷宮,然后程序自動探索路徑,并輸出迷宮的路徑 </p><p>  5)、創(chuàng)新(見源程序附錄)

7、</p><p>  6)、軟件、硬件環(huán)境</p><p>  軟件環(huán)境:Microsoft Windows Xp Processional2002 Service</p><p>  Microsoft Visual C++6.0 </p><p>  硬件環(huán)境:cpu:AMD Athlon(tm)64x Dual</p>

8、<p>  Processor 3800+2.01GHz Main memory:960MB</p><p><b>  2.實驗步驟</b></p><p>  a.認(rèn)真閱讀課本的相關(guān)知識章節(jié)。</p><p>  b.認(rèn)真分析課題的需求分析和功能分析。</p><p>  c.根據(jù)分析的思路寫出偽代碼。&

9、lt;/p><p>  d.根據(jù)偽代碼上機編寫程序,進行初步調(diào)試。</p><p>  e.逐步增加完善系統(tǒng)的功能,實現(xiàn)人工智能化。</p><p>  f.記錄上機運行時遇到的錯誤,進行認(rèn)真分析。</p><p>  g.最后認(rèn)真撰寫實驗報告,寫出實驗心得總結(jié)。</p><p><b>  3. 實驗內(nèi)容<

10、;/b></p><p><b>  1)、設(shè)計概述</b></p><p>  (a) 開發(fā)平臺:VC6.0</p><p><b>  (b) 參考書籍:</b></p><p>  1.數(shù)據(jù)結(jié)構(gòu)C++描述 熊岳山 陳懷義 編著 國防科技大學(xué)出版社</p><p&g

11、t;  2、《數(shù)據(jù)結(jié)構(gòu)與算法》黃定  黃煜廉 編著  廣東科技出版社  2000年1月第1版</p><p>  3、《數(shù)據(jù)結(jié)構(gòu)輔導(dǎo)與提高》徐孝凱  編著 清華大學(xué)出版社 2003年12月第1版</p><p>  (c) 開發(fā)周期: 10天(構(gòu)思3天、雛形3天、修改2天、再修改1天、完善1天)</p><

12、p><b>  2)、處理流程</b></p><p>  (a)畫出功能結(jié)構(gòu)圖</p><p>  (b)畫出主要數(shù)據(jù)結(jié)構(gòu)的類圖</p><p>  (c)主要函數(shù)的程序流程圖</p><p><b>  1.</b></p><p>  main函數(shù)流程圖:<

13、/p><p>  2.探索路徑函數(shù)findpath()</p><p>  3.自行輸入迷宮函數(shù)writefile()</p><p>  (d)寫出數(shù)據(jù)測試表(輸入數(shù)據(jù)/預(yù)期結(jié)果)</p><p>  測試一:從文件中讀取迷宮: 001000100</p><p><b>  001000101</b&g

14、t;</p><p><b>  000011000</b></p><p><b>  011100100</b></p><p><b>  000100001</b></p><p><b>  010001010</b></p>&l

15、t;p><b>  011110011</b></p><p><b>  110001011</b></p><p><b>  110000000</b></p><p><b>  輸出:</b></p><p>  探索路徑: (1,1,向下

16、) </p><p><b>  (2,1,向下)</b></p><p><b> ?。?,1,向下)</b></p><p><b>  (4,1,向下)</b></p><p><b> ?。?,1,向右)</b></p><p&

17、gt;<b>  (5,2,向右)</b></p><p><b> ?。?,3,向下)</b></p><p><b>  (6,3,向右)</b></p><p><b> ?。?,4,向右)</b></p><p><b> ?。?,5,向

18、上)</b></p><p><b> ?。?,5,向右)</b></p><p><b> ?。?,6,向右)</b></p><p><b> ?。?,7,向下)</b></p><p><b>  (6,7,向下)</b></p&g

19、t;<p><b>  (7,7,向下)</b></p><p><b>  (8,7,向下)</b></p><p><b>  (9,7,向右)</b></p><p><b> ?。?,8,向右)</b></p><p><b&g

20、t; ?。?,9)</b></p><p><b>  測試二:</b></p><p><b>  自己輸入迷宮:</b></p><p><b>  001</b></p><p><b>  000</b></p><

21、p><b>  100</b></p><p><b>  輸出探索路徑:</b></p><p><b> ?。?,1,向下)</b></p><p><b> ?。?,1,向右)</b></p><p><b> ?。?,2,向下)&l

22、t;/b></p><p><b> ?。?,2,向右)</b></p><p><b> ?。?,3)</b></p><p><b>  測試三:</b></p><p><b>  自己輸入迷宮:</b></p><p>

23、;<b>  111</b></p><p><b>  111</b></p><p><b>  000</b></p><p><b>  輸出探索路徑:</b></p><p>  Sorry!找不到路徑!</p><p>

24、<b>  4.實驗結(jié)果</b></p><p>  結(jié)果為以下三種情形之一:</p><p>  1)編譯不通過:給出編譯錯。</p><p>  Compiling...</p><p><b>  stack.cpp</b></p><p>  Skipping...

25、(no relevant changes detected)</p><p><b>  main.cpp</b></p><p>  Linking...</p><p>  stack.obj : error LNK2005: "public: __thiscall stack::stack(void)" (??0sta

26、ck@@QAE@XZ) already defined in main.obj</p><p>  stack.obj : error LNK2005: "public: __thiscall stack::~stack(void)" (??1stack@@QAE@XZ) already defined in main.obj</p><p>  stack.obj :

27、 error LNK2005: "public: void __thiscall stack::Push(struct DataType)" (?Push@stack@@QAEXUDataType@@@Z) already defined in main.obj</p><p>  stack.obj : error LNK2005: "public: struct DataType

28、 __thiscall stack::Pop(void)" (?Pop@stack@@QAE?AUDataType@@XZ) already defined in main.obj</p><p>  stack.obj : error LNK2005: "public: struct DataType __thiscall stack::GetPop(void)" (?GetPop

29、@stack@@QAE?AUDataType@@XZ) already defined in main.obj</p><p>  stack.obj : error LNK2005: "public: void __thiscall stack::Clear(void)" (?Clear@stack@@QAEXXZ) already defined in main.obj</p>

30、<p>  stack.obj : error LNK2005: "public: bool __thiscall stack::IsEmpty(void)" (?IsEmpty@stack@@QAE_NXZ) already defined in main.obj</p><p>  Debug/迷宮問題.exe : fatal error LNK1169: one or mo

31、re multiply defined symbols found</p><p>  執(zhí)行 link.exe 時出錯.</p><p>  迷宮問題.exe - 1 error(s), 0 warning(s)</p><p><b>  改正:</b></p><p>  在main。cpp中原來包含的是stack.

32、cpp把它改為包含stack.h即可</p><p><b>  錯誤二:</b></p><p>  用string直接定義字符串str時,說沒有定義str</p><p>  原因:#include<string></p><p>  using namespace std ;沒有用標(biāo)準(zhǔn)空間</p&

33、gt;<p><b>  錯誤三:</b></p><p><b>  拼寫錯誤</b></p><p><b>  正確結(jié)果輸出:</b></p><p><b>  接上面:</b></p><p><b>  接上面:<

34、/b></p><p><b>  5. 實驗總結(jié)分析</b></p><p>  1)、時間和空間分析</p><p>  該算法的運行時間和使用系統(tǒng)棧所占有的存儲空間與迷宮的大小成正比,迷宮長為m,寬為n,在最好情況下的時間和空間復(fù)雜度均為O(m+n),在最差情況下均為O(m*n),平均情況在它們之間</p><

35、p><b>  2)、程序的優(yōu)點</b></p><p>  進入演示程序后即顯示文本方式的用戶界面</p><p>  本程序模塊劃分比較合理,且利用指針存儲迷宮,操作方便。</p><p>  能按照玩游戲人的意愿任意輸入迷宮大小,并且可以保存新輸入的迷宮,方便退出游戲后仍可打開自己定義文件查看迷宮。</p><p

36、>  3)、遇到的問題及如何解決</p><p>  a.如何知道哪一點被探索過且路徑不通?</p><p>  答:maze【i】【j】本來時表示通與不通,那么可以當(dāng)探索該點之后,將其值賦為-1,就可以知道此點已經(jīng)被訪問過</p><p>  b.如何正確的使用文件讀入迷宮?</p><p>  答:查看大一學(xué)的C++課本,仔細(xì)閱讀文

37、件那一章。</p><p>  c.我想讓用戶在每次玩游戲之后都能查看輸入的迷宮,我想的是運行程序時隨意新建文本文檔,開始是直接輸入一個.txt結(jié)尾的字符串,但編譯好多錯誤,我猜應(yīng)該是要調(diào)用相關(guān)函數(shù),但具體是那一個不清楚。 </p><p>  答:去圖書館借閱相關(guān)資料,要調(diào)用相應(yīng)的庫函數(shù)。</p><p>  4)、存在的缺陷、改進設(shè)想</p>&l

38、t;p>  每當(dāng)自行輸入迷宮后,生成相應(yīng)的文件保存,但是我在想:一旦玩游戲的人多了,玩的次數(shù)多了,那么生成的保存迷宮文件就會很多,會給人工智能化系統(tǒng)造成文件冗余。我設(shè)想:能不能在一段時間之后系統(tǒng)自動調(diào)用函數(shù)來清除冗余文件。</p><p>  5)、自我評價、經(jīng)驗體會等</p><p>  通過這次課程設(shè)計,體會如下:1、進一步熟悉掌握了有關(guān)棧的基本操作;2、對迷宮有了更多的認(rèn)識

39、3、更進一步掌握有關(guān)類的操作4、由于對棧的算法推敲不足,使程序調(diào)試時費時不少</p><p>  總之:我認(rèn)為這次課程設(shè)計做的很好。課程設(shè)計的成功使我相信一句話:有付出就會有收獲,要相信自己。</p><p>  6. 附錄(源程序清單,要求含有至少30%的源碼附有注釋)</p><p>  迷宮程序代碼(本程序有個創(chuàng)新點)</p><p&g

40、t;  /////////////////////////////////////////////////////////////////////</p><p><b>  /*</b></p><p>  Name: stack.h </p><p>  Author: 羅丹 </p><p>  Descri

41、ption: 用于記錄探索路徑的棧類頭文件 </p><p><b>  */</b></p><p>  #include<iostream></p><p>  #include"fstream"</p><p>  using namespace std;</p>

42、<p>  class DataType //定義描述迷宮中當(dāng)前位置的類型</p><p><b>  {public:</b></p><p>  int x; //x代表當(dāng)前位置的行坐標(biāo)</p><p>  int y; //y代表當(dāng)前位置的列坐標(biāo)&

43、lt;/p><p>  int pre; //pre表示移動到下一步的方向</p><p>  }; </p><p>  class Move //定義下一個位置的方向</p><p><b>  { public:</b></p>&l

44、t;p><b>  int x; </b></p><p><b>  int y;</b></p><p><b>  };</b></p><p>  class Node //鏈表結(jié)點</p><p><b>  {publi

45、c:</b></p><p>  DataType data;</p><p>  Node *next;</p><p><b>  };</b></p><p><b>  //下面定義棧</b></p><p>  class stack</p>

46、<p><b>  {private:</b></p><p>  Node *top; //指向第一個結(jié)點的棧頂指針</p><p><b>  public:</b></p><p>  stack(); //構(gòu)造函數(shù),置空棧</p>

47、<p>  ~stack(); //析構(gòu)函數(shù)</p><p>  void Push(DataType data);//把元素data壓入棧中</p><p>  DataType Pop(); //使棧頂元素出棧</p><p>  DataType GetPop(); //取出棧頂元素&l

48、t;/p><p>  void Clear(); //把棧清空</p><p>  bool IsEmpty(); //判斷棧是否為空,如果為空則返回1,否則返回0</p><p><b>  };</b></p><p>  /////////////////////////////

49、////////////////////////////////////////</p><p><b>  /*</b></p><p>  Name: stack.cpp </p><p>  Author: 羅丹 </p><p>  Description: 用于記錄探索路徑的棧類實現(xiàn)文件 </p&

50、gt;<p><b>  */</b></p><p>  #include"stack.h"</p><p>  stack::stack() //構(gòu)造函數(shù),置空棧</p><p>  {top=NULL;}</p><p>  stack::

51、~stack() //析構(gòu)函數(shù)</p><p><b>  {}</b></p><p>  void stack::Push(DataType x) //進棧</p><p>  {Node *TempNode;</p><p>  TempNode=new Nod

52、e;</p><p>  TempNode->data=x;</p><p>  TempNode->next=top;</p><p>  top=TempNode;}</p><p>  DataType stack::Pop() //棧頂元素出棧</p><p><b

53、>  {</b></p><p>  DataType Temp;</p><p>  Node *TempNode=NULL;</p><p>  TempNode=top;</p><p>  top=top->next;</p><p>  Temp=TempNode->data;&

54、lt;/p><p>  delete TempNode;</p><p>  return Temp;</p><p><b>  }</b></p><p>  DataType stack::GetPop() //取出棧頂元素</p><p>  {return top-&

55、gt;data;}</p><p>  void stack::Clear() //把棧清空</p><p>  {top=NULL;}</p><p>  bool stack::IsEmpty() //判斷棧是否為空,如果為空則返回1,否則返回0</p><p>  {if(t

56、op==NULL) return true;</p><p>  else return false;}</p><p>  /////////////////////////////////////////////////////////////////////</p><p><b>  /*</b></p><p>

57、;  Name: main.cpp </p><p>  Author: 羅丹 </p><p>  Description: 主函數(shù)文件 </p><p><b>  */</b></p><p>  #include"stack.h"</p><p>  #inc

58、lude<iostream></p><p>  #include<string></p><p>  #include<fstream></p><p>  using namespace std ;</p><p><b>  /*</b></p><p>

59、  Description: 外部函數(shù)的聲明部分</p><p><b>  */</b></p><p>  bool findpath(int **maze,int m,int n); //尋找迷宮路徑 </p><p>  void PrintPath(stack p);

60、 //輸出路徑</p><p>  void Restore(int **maze,int m,int n); //恢復(fù)迷宮</p><p>  Move move[4]={{0,1},{1,0},{0,-1},{-1,0}}; //定義當(dāng)前位置移動的4個方向(上,右,下,左)</p><p&g

61、t;  int** readFile (int &m,int &n);</p><p>  int** writeFile(int &m,int &n);</p><p><b>  /*</b></p><p>  Description: main.cpp</p><p><b

62、>  */</b></p><p>  void main()</p><p><b>  { </b></p><p>  cout<<endl;//</p><p>  cout<<"◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆"<&

63、lt;endl;</p><p>  cout<<" 2007-2008年度第一學(xué)期數(shù)據(jù)結(jié)構(gòu)課程之課程設(shè)計 "<<endl;</p><p>  cout<<endl;</p><p>  cout<<"

64、 ——迷宮問題 "<<endl; </p><p>  cout<<" 開發(fā)員 : 羅丹"<<endl;</p><p>  cout<<" 專業(yè)班級: 計算機061班"<<endl;</p><p>

65、  cout<<"◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl;</p><p>  cout<<" 歡迎進入迷宮游戲 "<<endl;</p><p>  int m=0,n=0; </p>

66、<p>  int **maze; </p><p><b>  char ch;</b></p><p>  int flag=0,flag1=0; </p><p>  while(flag1==0)</p><p><b>  {</b></p><p>

67、  while(flag==0)//標(biāo)志是否重新選擇</p><p>  {cout<<endl;</p><p>  cout<<" ★請從以下選項中選擇獲取迷宮的方法!"<<endl;</p><p>  cout<<" <a>從文件中讀取"<

68、;<endl;</p><p>  cout<<" <b>直接自行輸入"<<endl;</p><p>  cout<<" ★請選擇:";</p><p><b>  cin>>ch;</b></p><

69、p>  if(ch=='a'){maze=readFile(m,n);flag=1;}</p><p>  else if(ch=='b'){maze=writeFile(m,n);flag=1;}</p><p><b>  else </b></p><p>  cout<<"

70、★ Sorry!您輸入的選擇代碼不在范圍內(nèi)!請從新選擇"<<endl;</p><p><b>  }</b></p><p>  if(findpath(maze,m,n)) </p><p>  cout<<" ★ Congratulations! 迷宮路徑探索成功!"<<

71、;endl; //得到路徑</p><p><b>  else </b></p><p>  cout<<" ★Sorry! 路徑不存在★"<<endl;</p><p>  cout<<endl;</p><p>  cout<<" ★

72、 繼續(xù)玩嗎?(y/n)"; </p><p><b>  char c;</b></p><p><b>  cin>>c;</b></p><p>  if(c==n) flag1=1;</p><p>  else flag=0;</p><p>

73、<b>  }</b></p><p>  cout<<"◆◆◆◆◆◆◆ 謝謝,您已經(jīng)退出迷宮系統(tǒng) ◆◆◆◆◆◆◆"<<endl;</p><p>  cout<<"◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆"<<endl;</p><p>&

74、lt;b>  }</b></p><p><b>  /*</b></p><p>  Description: 獲取迷宮函數(shù)</p><p><b>  */</b></p><p>  int** readFile (int &m,int &n)

75、 //讀出文件</p><p>  {int **maze; </p><p>  int i=0,j=0;</p><p>  cout<<" ★您選擇的是直接從文件中讀取迷宮!"<<endl;</p><p>  cout<<en

76、dl;</p><p>  cout<<" 文件中的迷宮如下: "<<endl;</p><p>  char ch; //定義一個字符,讀取文件中的內(nèi)容</p><p>  ifstream open("maze.txt");

77、 //定義一個文件對象,并打開文件"maze.txt"</p><p>  //讀取內(nèi)容記錄行數(shù)和列數(shù) (創(chuàng)新點一:從文件中直接讀取迷宮)</p><p>  while(open.get(ch)) //從讀取文件中內(nèi)容(一旦個字符形式)</p><p>  {if(ch=='0'

78、;||ch=='1') </p><p>  {j++; } //是‘0’或‘1’字符寬就加1</p><p>  if(ch=='\n') </p><p><b>  {</b></p><p>  i++

79、; //如果是換行符,就行加1</p><p>  n=j; //得列數(shù)</p><p><b>  j=0; </b></p><p><b>  }</b

80、></p><p><b>  }</b></p><p>  open.close(); //讀取文件結(jié)束</p><p>  m=i; </p><p>  maze=new int *[m+2];

81、 //申請長度等于行數(shù)加2的二維指針(為后面的回復(fù)迷宮打下基礎(chǔ))</p><p>  for(i= 0;i<m+2;i++) //申請空間</p><p>  {maze[i]=new int[n+2];}</p><p><b>  i=j=1;</

82、b></p><p>  ifstream open1("maze.txt"); //重新讀取文件,以得到內(nèi)容</p><p>  while(open1.get(ch))</p><p><b>  {</b></p><p>  if(ch==

83、9;1'||ch=='0')</p><p>  {maze[i][j]=ch-'0'; //把數(shù)字字符轉(zhuǎn)化為數(shù)字,并存到指針里</p><p>  cout<<maze[i][j]<<" "; //在屏

84、幕中顯示迷宮</p><p><b>  j++;}</b></p><p>  if(ch=='\n') //遇到換行,指針也相應(yīng)換行</p><p>  {cout<<endl;</p><p><b>  i

85、++;</b></p><p><b>  j=1;}</b></p><p><b>  }</b></p><p>  open1.close(); //讀取結(jié)束</p><p>  return maze; <

86、/p><p><b>  }</b></p><p>  int** writeFile (int &m,int &n) //將自定義迷宮寫入文件</p><p>  {int a,b; </p><p><b>  int i,j;</b><

87、;/p><p>  int**maze;</p><p>  cout<<" ★您選擇的是自行輸入迷宮!"<<endl;</p><p>  cout<<" 請輸入迷宮的長:";cin>>b; //輸入迷宮的長和寬</p><p>  cout

88、<<" 請輸入迷宮的寬:";cin>>a; </p><p>  cout<<" ★請輸入迷宮內(nèi)容(0代表可通,1代表不通):\n";</p><p><b>  m=a;</b></p><p>  n=b;

89、 //m,n分別代表迷宮的行數(shù)和列數(shù)</p><p>  maze=new int *[m+2]; </p><p>  for(i= 0;i<m+2;i++) </p><p>  {maze[i]=new int[n+2];} //創(chuàng)新點二::隨意申請空間</p><p>  for

90、(i=1;i<=m;i++) //輸入迷宮的內(nèi)容,0代表可通,1代表不通</p><p>  for(j=1;j<=n;j++)</p><p>  cin>>maze[i][j];</p><p>  cout<<" ★是否保存新迷宮?(y/n): ";</p&g

91、t;<p>  char choose;</p><p>  cin>>choose;</p><p>  if(choose=='Y'||choose=='y')</p><p><b>  {char ch;</b></p><p>  string str;

92、</p><p>  cout<<" ★請輸入保存迷宮的文件名(以.txt結(jié)束):";</p><p>  cin>>str; </p><p>  ofstream open(str.c_str()); //創(chuàng)新點三:按玩游戲人的意愿創(chuàng)建存儲迷宮的文件,也可不建立。</p><

93、p>  for(i=1;i<=m;i++)</p><p>  {for(j=1;j<=n;j++)</p><p>  {ch='0'+maze[i][j];</p><p>  open<<ch;}</p><p>  open<<endl;</p><p>

94、;  flush(cout);}</p><p>  open.close();}</p><p>  for(i=0;i<m+2;i++) </p><p>  maze[i][0]=maze[i][n+1]=1;</p><p>  for(i=0;i<n+2;i++)</p><

95、p>  maze[0][i]=maze[m+1][i]=1;</p><p>  return maze;</p><p><b>  } </b></p><p><b>  /*</b></p><p>  Description: 探索路徑函數(shù)</p><p>

96、<b>  */</b></p><p>  bool findpath(int **maze,int m,int n)</p><p>  {stack q,p; //創(chuàng)新點四:用棧p、q,分別存探索迷宮的過程和存儲路徑</p><p>  DataType Temp1,Temp2;

97、</p><p>  int x,y,loop;</p><p>  Temp1.x=1;</p><p>  Temp1.y=1;</p><p>  q.Push(Temp1); //將入口位置入棧</p><p>  p.Push(Temp1);

98、</p><p>  maze[1][1]=-1; //創(chuàng)新點五:標(biāo)志入口位置已到達過</p><p>  while(!q.IsEmpty()) //棧q非空,則反復(fù)探索</p><p>  {Temp2=q.GetPop(); </p>

99、;<p>  if(!(p.GetPop().x==q.GetPop().x&&p.GetPop().y==q.GetPop().y)) </p><p>  p.Push(Temp2); </p><p>  //如果有新位置入棧,則把上一個探索的位置存入棧p</p><p>  for(loop=0;loop<

100、4;loop++) //探索當(dāng)前位置的4個相鄰位置</p><p>  {x=Temp2.x+move[loop].x; </p><p>  y=Temp2.y+move[loop].y; </p><p>  if(maze[x][y]==0) //判

101、斷新位置是否可達</p><p>  {Temp1.x=x;</p><p>  Temp1.y=y;</p><p>  maze[x][y]=-1; //標(biāo)志新位置已到達過</p><p>  q.Push(Temp1); }

102、//新位置入棧</p><p>  if((x==(m))&&(y==(n))) //成功到達出口</p><p>  {Temp1.x=m;</p><p>  Temp1.y=n;</p><p>  Temp1.pre=0;</p><p>  p.Pu

103、sh(Temp1); //把最后一個位置入棧</p><p>  PrintPath(p); </p><p>  Restore(maze,m,n); //恢復(fù)路徑(因為迷宮里面的內(nèi)容已被改變</p><p>  return 1; }}

104、 //表示成功找到路徑 </p><p>  if(p.GetPop().x==q.GetPop().x&&p.GetPop().y==q.GetPop().y)//如果沒有新位置入棧,則返回到上一個位置 </p><p><b>  {p.Pop();</b></p>

105、<p>  q.Pop();}}</p><p>  return 0; //表示查找失敗,即迷宮無路經(jīng)</p><p><b>  }</b></p><p><b>  /*</b></p><p>  Descr

106、iption: 輸出路徑函數(shù)</p><p><b>  */</b></p><p>  void PrintPath(stack p) //輸出路徑</p><p>  {cout<<endl;</p><p>  cout<<" ★

107、★迷宮的路徑為"<<endl;</p><p>  cout<<" 說明:括號內(nèi)的內(nèi)容分別表示為(行坐標(biāo),列坐標(biāo),方向)\n";</p><p>  stack t; //定義一個棧,按從入口到出口存取路徑</p><p>  int ro

108、w,column;</p><p>  DataType data;</p><p>  Node *temp;</p><p>  temp=new Node; //申請空間</p><p>  temp->data=p.Pop(); </p>&

109、lt;p>  t.Push(temp->data); //第一個位置入棧</p><p>  delete temp; </p><p>  while(!p.IsEmpty()) //棧p非空,則轉(zhuǎn)移</p><p>  {temp=ne

110、w Node;</p><p>  temp->data=p.Pop(); //獲取下一個位置</p><p><b>  //得到行走方向</b></p><p>  row=t.GetPop().x-temp->data.x; //行坐標(biāo)方向</p

111、><p>  column=t.GetPop().y-temp->data.y; //列坐標(biāo)方向</p><p>  if(row==1) temp->data.pre=1; //向下,用1表示</p><p>  else if(column==1) temp->data.pre=2;

112、//向右,用2表示</p><p>  else if(row==-1) temp->data.pre=3; //向上,用3表示</p><p>  else if(column==-1) temp->data.pre=4; //向左,用4表示</p><p>  t.Push(temp->data);

113、 //把新位置入棧</p><p>  delete temp;</p><p><b>  }</b></p><p>  while(!t.IsEmpty()) //棧非空,繼續(xù)輸出</p><p>  {data=t.Pop();&l

114、t;/p><p>  cout<<" "<<'('<<data.x<<','<<data.y<<","; </p><p>  switch(data.pre) //輸出相應(yīng)的方向

115、 </p><p>  {case 0:cout<<")\n";break;</p><p>  case 1:cout<<"向下)\n";break;</p><p>  case 2:cout<<"向右)\n";break;</p><p> 

116、 case 3:cout<<"向上)\n";break;</p><p>  case 4:cout<<"向左)\n";break;</p><p><b>  }}}</b></p><p><b>  /*</b></p><p>

117、  Description: 恢復(fù)路徑函數(shù)</p><p><b>  */</b></p><p>  void Restore(int **maze,int m,int n) //恢復(fù)迷宮</p><p><b>  {int i,j;</b></p><p>  for(i=0;

118、i<m+2;i++) //遍歷指針</p><p>  for(j=0;j<n+2;j++) </p><p>  {if(maze[i][j]==-1) //恢復(fù)探索過位置,即把-1恢復(fù)為0</p><p>  maze[i][j]=0;}</p><p><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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論