數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-- 運動會分?jǐn)?shù)統(tǒng)計_第1頁
已閱讀1頁,還剩19頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  課題一 運動會分?jǐn)?shù)統(tǒng)計</p><p><b>  一、任務(wù):</b></p><p>  參加運動會有n個學(xué)校,學(xué)校編號為1……n。比賽分成m個男子項目,和w個女子項目。項目編號為男子1~m,女子m+1~m+w。不同的項目取前五名或前三名積分;取前五名的積分分別為:7、5、3、2、1,前三名的積分分別為:5、3、2;哪些項目取前五名或前

2、三名由學(xué)生自己設(shè)定。(m<=20,n<=20)</p><p><b>  二、 功能要求:</b></p><p><b>  功能要求:</b></p><p>  1) 可以輸入各個項目的前三名或前五名的成績;</p><p>  2) 能統(tǒng)計各學(xué)校總分;</p>&

3、lt;p>  3) 可以按學(xué)校編號、學(xué)??偡?、男女團體總分排序輸出;</p><p>  4) 可以按學(xué)校編號查詢學(xué)校某個項目的情況;</p><p>  5) 可以按項目編號查詢?nèi)〉们叭蚯拔迕膶W(xué)校。</p><p><b>  三、需求分析</b></p><p>  1.在定義學(xué)校及運動會項目的類型是直接使

4、用數(shù)組去定義,設(shè)定了好幾個數(shù)組,這樣在使用的過程中顯得非常麻煩,改進方法后運用線性表去將學(xué)校及各個運動項目定義為結(jié)構(gòu)變量,結(jié)構(gòu)變量可以作為數(shù)組元素,同時這些數(shù)組還可以成為結(jié)構(gòu)類型的成員,并且結(jié)構(gòu)變量和志向結(jié)構(gòu)變量的指針都可以作為函數(shù)參數(shù)和返回值。這樣在使用的過程中間少了很多不必要的麻煩。</p><p>  2.由于學(xué)校的個數(shù)和運動項目的個數(shù)不是很多,所以在查找的選擇上沒有使用其他計較麻煩的查找方式而是直接使用比

5、較簡便的、針對查找對象較少的情況下使用的直接查找法</p><p>  3.本程序的算法都比較合理,采用了線性順序表和串的方式,盡可能的減少不必要的麻煩。模塊的劃分也十分的合理,根據(jù)題目的要求,將模塊十分情緒的分成四個大的模塊,由于數(shù)據(jù)對象并比較少,所以都是采用最簡便最有效的方式。然后通過主函數(shù)直接調(diào)用這些函數(shù)已達(dá)到完成所需要的命令。</p><p>  4.本程序中,由計算機內(nèi)部宏定義學(xué)

6、校個數(shù)和運動項目個數(shù),由用戶自定義學(xué)校名字和項目名字。由用戶自定義的各項目排名輸出總排序。</p><p><b>  四、概要設(shè)計</b></p><p>  1.串的抽象數(shù)據(jù)類型的定義如下:</p><p>  ADT String{</p><p>  數(shù)據(jù)對象:D={ai|ai ∈characterSet,I=1

7、,2,……,n,n>=0}</p><p>  數(shù)據(jù)關(guān)系:R1={<ai-1,ai>|ai-1,ai∈D,I=2,……,n}</p><p><b>  基本操作:</b></p><p>  StrAssign(&T,chars)</p><p>  初始條件:chars是字符串常量。<

8、/p><p>  操作結(jié)果:生成一起值等于chars的字符串T.</p><p>  StrCopy(&T,s)</p><p>  初始條件: 串S存在</p><p>  操作結(jié)果:由串復(fù)制得串T.</p><p>  StrEmpty(s)</p><p>  初始條件: 串S存在。&

9、lt;/p><p>  操作結(jié)果:若S為空串,則返回TRUE,否則返回FALSE.</p><p>  Strcompare(S,T)</p><p>  初始條件:串S和T存在。</p><p>  操作結(jié)果:若S>T,則返回>0;若S=T,則返回值=0,若S<T,則返回值<0.</p><p>

10、  Strlength(S)</p><p>  初始條件: 串S存在。</p><p>  操作結(jié)果:返回S的元素個數(shù),稱為串的長度。</p><p>  ClearString(&S)</p><p>  初始條件: 串S存在。</p><p>  操作結(jié)果:將S清為空串。</p><p

11、>  Concat(&T,S1,S2)</p><p>  初始條件:串S1和串S2都存在。</p><p>  操作結(jié)果:用Y返回由S1和S2連接而成的新串。</p><p><b>  }</b></p><p>  2.現(xiàn)性順序表的抽象數(shù)據(jù)定義如下:</p><p>  Typ

12、edef Struct LNode</p><p><b>  { </b></p><p>  ElemType *elem</p><p>  Int length</p><p>  Int listsize;</p><p>  }LNode,*linklist;</p>

13、<p>  3.本程序分為三個模塊:</p><p><b>  1)主程序模塊</b></p><p><b>  main()</b></p><p>  {while(標(biāo)志!=0)</p><p><b>  {執(zhí)行命令;</b></p>&

14、lt;p><b>  輸入標(biāo)志;</b></p><p><b>  }</b></p><p>  switch(標(biāo)志)</p><p>  { case 標(biāo)志:命令;break;</p><p><b>  ……</b></p><p>  

15、default:命令;</p><p><b>  }</b></p><p><b>  }</b></p><p>  2)賦值模塊——實現(xiàn)各個數(shù)據(jù)的賦值</p><p>  Sho fuzhi()</p><p><b>  { for( )</b>

16、;</p><p><b>  {輸入學(xué)校的名字</b></p><p><b>  }</b></p><p><b>  for()</b></p><p><b>  {輸入幾個體育項目</b></p><p><b&g

17、t;  }</b></p><p><b>  For()</b></p><p>  {按成績輸入各個體育項目的學(xué)校的名次</p><p><b>  }</b></p><p>  3)排序模塊:——對各項成績進行排序</p><p>  Void paixu

18、( )</p><p>  { 給i,j,賦初值;</p><p><b>  For()</b></p><p><b>  If{判斷;</b></p><p><b>  排序; </b></p><p><b>  }</b&g

19、t;</p><p><b>  輸出結(jié)果;</b></p><p><b>  }</b></p><p>  4)查詢模塊;——根據(jù)要求查詢成績的排名情況</p><p>  Void chaxun ()</p><p><b>  { 定義臨時變量;</

20、b></p><p><b>  輸入要查找的代碼;</b></p><p><b>  For()</b></p><p><b>  If(命令=進入)</b></p><p><b>  {輸出成績;</b></p><p&

21、gt;<b>  }</b></p><p><b>  }</b></p><p><b>  程序調(diào)用關(guān)系:</b></p><p><b>  五、詳細(xì)設(shè)計</b></p><p>  #include<iostream.h> </

22、p><p>  #include<malloc.h> </p><p>  #include <string.h> </p><p>  #include<stdlib.h> </p><p>  #define m 10 </p><p>  #define n 5 </p>

23、;<p>  typedef struct sport </p><p><b>  { </b></p><p>  char sportname[20]; </p><p>  int num;int s; </p><p><b>  }spo; </b></p>

24、<p>  typedef struct sport1 </p><p><b>  { </b></p><p>  char schoolname[20]; </p><p>  spo sports[m]; </p><p>  int zong,boy,girl,zong1,boy1,girl1; &l

25、t;/p><p>  }spos,*spor; </p><p>  typedef struct school </p><p><b>  { </b></p><p>  spos shools[n]; </p><p>  }*sho,shos; </p><p>  

26、sho fuzhi() </p><p><b>  { </b></p><p>  sho l;int a,b,c,d,e; </p><p>  l=(shos*)malloc(sizeof(shos)); </p><p><b>  int i,j; </b></p><

27、;p>  for(i=0;i<n;i++) </p><p><b>  { </b></p><p>  cout<<"請輸入"<<i+1<<"個學(xué)校的名字"<<endl; </p><p>  cin>>l->shools[

28、i].schoolname; //輸入學(xué)校名字</p><p><b>  } </b></p><p>  system("cls");</p><p>  for(i=0;i<m;i++) </p><p><b>  { </b></p><p&g

29、t;  cout<<"請輸入"<<i+1<<"個運動項目的名字"<<endl; //輸入運動項目名字</p><p>  cin>>l->shools[0].sports[i].sportname; </p><p>  for(j=0;j++;j<n) </p>

30、<p><b>  { </b></p><p>  strcpy(l->shools[j].sports[i].sportname,l->shools[0].sports[i].sportname); </p><p><b>  }</b></p><p><b>  }</b&g

31、t;</p><p>  system("cls");</p><p>  for(i=0;i<n;i++) </p><p>  {for(j=0;j<m;j++) </p><p><b>  { </b></p><p>  l->shools[i].s

32、ports[j].num=0;l->shools[i].sports[j].s=0; </p><p>  }l->shools[i].zong=0;l->shools[i].boy=0;l->shools[i].girl=0;} </p><p>  cout<<"請按各學(xué)校的編碼進行男子成績輸入"<<endl;<

33、/p><p>  for(j=0;j<n;j++) </p><p>  cout<<j+1<<"."<<l->shools[j].schoolname; </p><p>  cout<<endl; </p><p>  for(i=0;i<m-5;i++)

34、</p><p><b>  { </b></p><p>  cout<<"請輸入"<<l->shools[0].sports[i].sportname<<"的前5名的學(xué)校代碼"; </p><p>  cin>>a>>b>&g

35、t;c>>d>>e; </p><p>  l->shools[a-1].sports[i].num=7; </p><p>  l->shools[b-1].sports[i].num=5; </p><p>  l->shools[c-1].sports[i].num=3; </p><p>  

36、l->shools[d-1].sports[i].num=2; </p><p>  l->shools[e-1].sports[i].num=1; </p><p><b>  } </b></p><p>  system("cls");</p><p>  cout<<&

37、quot;請按各學(xué)校的編碼進行女子成績輸入"<<endl;</p><p>  for(j=0;j<n;j++) </p><p>  cout<<j+1<<"."<<l->shools[j].schoolname<<" "; </p><p>

38、  cout<<endl; </p><p>  for(i=m-5;i<m;i++) </p><p><b>  { </b></p><p>  cout<<"請輸入"<<l->shools[0].sports[i].sportname<<"的前3

39、名的學(xué)校代碼"; </p><p>  cin>>a>>b>>c;</p><p>  l->shools[a-1].sports[i].num=5; </p><p>  l->shools[b-1].sports[i].num=3; </p><p>  l->shools[

40、c-1].sports[i].num=2; </p><p><b>  } </b></p><p>  system("cls");</p><p>  return l; </p><p><b>  } </b></p><p>  void su

41、m(sho l) //求和</p><p><b>  { </b></p><p><b>  int i,j; </b></p><p>  for(i=0;i<n;i++) </p><p><b>  { </b></p><p>  fo

42、r(j=0;j<m;j++) </p><p><b>  { </b></p><p>  l->shools[i].zong=l->shools[i].zong+l->shools[i].sports[j].num; </p><p><b>  } </b></p><p&

43、gt;  for(j=0;j<m-5;j++)l->shools[i].boy=l->shools[i].boy+l->shools[i].sports[j].num; </p><p>  for(j=m-3;j<m;j++)l->shools[i].girl=l->shools[i].girl+l->shools[i].sports[j].num; </p

44、><p>  cout<<l->shools[i].schoolname<<"總分為"<<l->shools[i].zong<<endl; </p><p><b>  } </b></p><p><b>  } </b></p>

45、<p>  void paixu1(sho l) //總分排序</p><p><b>  { </b></p><p>  int i,j,k=1; </p><p>  int temp=0; </p><p>  for(j=0;j<n;j++) </p><p><b

46、>  { </b></p><p>  for(i=0;i<n;i++) </p><p>  if(l->shools[i].zong>l->shools[j].zong) </p><p><b>  { </b></p><p><b>  k++; </

47、b></p><p><b>  } </b></p><p>  l->shools[j].zong1=k; </p><p><b>  k=1; </b></p><p><b>  } </b></p><p>  for(j=1;j

48、<n+1;j++) </p><p><b>  { </b></p><p>  for(i=0;i<n;i++) </p><p>  if(l->shools[i].zong1==j) </p><p>  cout<<"總分第"<<j<<

49、"名學(xué)校為:"<<l->shools[i].schoolname<<endl;; </p><p><b>  } </b></p><p><b>  } </b></p><p>  void paixu2(sho l) //男子團隊總分排序</p>&l

50、t;p><b>  { </b></p><p>  int i,j,k=1; </p><p>  int temp=0; </p><p>  for(j=0;j<n;j++) </p><p><b>  { </b></p><p>  for(i=0;

51、i<n;i++) </p><p>  if(l->shools[i].boy>l->shools[j].boy) </p><p><b>  { </b></p><p><b>  k++; </b></p><p><b>  } </b><

52、;/p><p>  l->shools[j].boy1=k; </p><p><b>  k=1; </b></p><p><b>  } </b></p><p>  for(j=1;j<n+1;j++) </p><p><b>  { </

53、b></p><p>  for(i=0;i<n;i++) </p><p>  if(l->shools[i].boy1==j) </p><p>  cout<<"男子團隊總分第"<<j<<"名學(xué)校為:"<<l->shools[i].schoolnam

54、e<<endl;; </p><p><b>  } </b></p><p><b>  } </b></p><p>  void paixu3(sho l) //女子團隊總分排序</p><p><b>  { </b></p><p>

55、;  int i,j,k=1; </p><p>  int temp=0; </p><p>  for(j=0;j<n;j++) </p><p><b>  { </b></p><p>  for(i=0;i<n;i++) </p><p>  if(l->shools

56、[i].girl>l->shools[j].girl) </p><p><b>  { </b></p><p><b>  k++; </b></p><p><b>  } </b></p><p>  l->shools[j].girl1=k; <

57、;/p><p><b>  k=1; </b></p><p><b>  } </b></p><p>  for(j=1;j<n+1;j++) </p><p><b>  { </b></p><p>  for(i=0;i<n;i++)

58、 </p><p>  if(l->shools[i].girl1==j) </p><p>  cout<<"女子團隊總分第"<<j<<"名學(xué)校為:"<<l->shools[i].schoolname<<endl; </p><p><b> 

59、 } </b></p><p><b>  } </b></p><p>  void chaxun1(sho l) //查詢編號</p><p><b>  { </b></p><p>  int j,a,b; </p><p>  cout<<&

60、quot;請按各學(xué)校的編號進行成績查詢"<<endl; </p><p>  for(j=0;j<n;j++) </p><p>  cout<<j+1<<"."<<l->shools[j].schoolname; </p><p>  cout<<endl; &l

61、t;/p><p><b>  cin>>a; </b></p><p>  cout<<"請按各運動的項目的編號進行成成績查詢"<<endl; </p><p>  for(j=0;j<m;j++) </p><p>  cout<<j+1<&l

62、t;"."<<l->shools[0].sports[j].sportname; </p><p>  cout<<endl; </p><p><b>  cin>>b; </b></p><p>  cout<<"此學(xué)校"<<l->

63、;shools[0].sports[b-1].sportname<<"項目分?jǐn)?shù)為:"<<l->shools[a-1].sports[b-1].num; </p><p>  cout<<endl; </p><p><b>  } </b></p><p>  void chaxun

64、2(sho l) //查詢某項目</p><p><b>  { </b></p><p>  int i,j,a,k=1; </p><p>  cout<<"請按各運動的項目的編號進行成成績查詢"<<endl; </p><p>  for(j=0;j<m;j++)

65、</p><p>  cout<<j+1<<"."<<l->shools[0].sports[j].sportname; </p><p>  cout<<endl; </p><p><b>  cin>>a; </b></p><p&g

66、t;  for(j=0;j<n;j++) </p><p><b>  { </b></p><p>  for(i=0;i<n;i++) </p><p>  if(l->shools[i].sports[a-1].num>l->shools[j].sports[a-1].num) </p>&l

67、t;p><b>  { </b></p><p><b>  k++; </b></p><p><b>  } </b></p><p>  l->shools[j].sports[a-1].s=k; </p><p><b>  k=1; </b

68、></p><p><b>  } </b></p><p>  for(j=1;j<n+1;j++) </p><p><b>  { </b></p><p>  for(i=0;i<n;i++) </p><p>  if(l->shools[

69、i].sports[a-1].s==j&&l->shools[i].sports[a-1].num>0) </p><p>  cout<<l->shools[0].sports[a-1].sportname<<"第"<<j<<"名學(xué)校為:"<<l->shools[i].sc

70、hoolname<<endl; </p><p><b>  } </b></p><p><b>  } </b></p><p><b>  main() </b></p><p><b>  { </b></p><p

71、>  sho l;int flog=1; </p><p>  cout<<("####################數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 運動會分?jǐn)?shù)統(tǒng)計#######################");</p><p>  cout<<(" ======= O(∩_∩)O 電信1105 顧嘉鳳

72、 110900501 O(∩_∩)O ======== ")<<endl;</p><p>  while(flog!=0) </p><p><b>  { </b></p><p>  cout<<"請輸入執(zhí)行編號:"<<endl; </p><p&

73、gt;  cout<<"1.賦值 \n2.學(xué)??偡?\n3.總分排序\n4.男子團體項目總分排序\n5.女子團體項目總分排序\n6.學(xué)校某個項目查詢\n"; </p><p>  cout<<"7.某項目排名情況查詢 \n0.退出"<<endl; </p><p>  cin>>flog; </

74、p><p>  switch(flog) </p><p><b>  { </b></p><p>  case 1:system("cls");l=fuzhi();break; </p><p>  case 2:system("cls");sum(l);break; </p

75、><p>  case 3:system("cls");paixu1(l);break; </p><p>  case 4:system("cls");paixu2(l);break; </p><p>  case 5:system("cls");paixu3(l);break; </p>&

76、lt;p>  case 6:system("cls");chaxun1(l);break; </p><p>  case 7:system("cls");chaxun2(l);break; </p><p>  case 0:cout<<"O(∩_∩)O OVER Thank you"<<endl;

77、break; </p><p>  default:system("cls");cout<<"ERROR"<<endl; </p><p><b>  } } } </b></p><p><b>  六、調(diào)試分析</b></p><

78、p>  按照程序給定的要求和指令,可以得到相應(yīng)的結(jié)果。比如按照學(xué)??偡峙鸥叩?,按男子(或女子)總分排高低分?jǐn)?shù);某項目前三名的學(xué)校編號;某一學(xué)校各項目的分?jǐn)?shù)情況。</p><p><b>  七、用戶手冊</b></p><p>  1)演示程序的運行環(huán)境為Windows 7系統(tǒng),Microsoft Visual Studio 6.0中的Microsoft Vis

79、ual c++ 6.0中運行,執(zhí)行文件為運動會分?jǐn)?shù)統(tǒng)計.exe</p><p>  2)入演示程序后即顯示DOS形式的界面:</p><p>  八、測試結(jié)果:1.頁面</p><p>  2輸入學(xué)校和運動項目:</p><p>  3男子/女子成績輸入:</p><p><b>  4各校總分:</b

80、></p><p>  5男/女團隊總分排序:</p><p><b>  6總分排序:</b></p><p>  輸入6,進入學(xué)校某個項目查詢頁面:</p><p>  輸入7,進入某個項目排名情況查詢頁面:</p><p>  課題四 迷宮問題</p><p&

81、gt;<b>  一、任務(wù)問題描述:</b></p><p>  迷宮問題是取自心理學(xué)的一個古典實驗。實驗中,把一只老鼠從一個沒有頂?shù)拇蠛凶拥拈T放入,在盒中設(shè)置了許多墻,對行進的方向形成了多處阻擋。盒子僅僅有一個出口,在出口處放置了一塊奶酪,吸引老鼠在迷宮中尋找道路以到達(dá)出口。重復(fù)對老鼠進行上述實驗,看老鼠能在多久找到出口。</p><p>  請設(shè)計一個算法實現(xiàn)迷宮

82、問題求解。</p><p><b>  二、功能要求:</b></p><p>  測試數(shù)據(jù):0表示可以行走的區(qū)域,1表示不可行走的區(qū)域。</p><p><b>  三. 需求分析:</b></p><p>  本程序是利用非遞歸的方法求出一條走出迷宮的路徑,并將路徑輸出。</p>

83、<p>  首先由用戶輸入一組二維數(shù)組來組成迷宮,確認(rèn)后程序自動運行,當(dāng)迷宮有完整路徑可以通過時,以0和1所組成的迷宮形式輸出,標(biāo)記所走過的路徑結(jié)束程序;當(dāng)迷宮無路徑時,提示輸入錯誤結(jié)束程序。</p><p><b>  四、 概要設(shè)計:</b></p><p>  1.抽象數(shù)據(jù)類型定義:</p><p><b>  ADT

84、 Find{</b></p><p>  數(shù)據(jù)對象:D={ai?ai ∈ElemSet,i=1,2,…,n,n≥0}</p><p>  數(shù)據(jù)關(guān)系:R1={<ai-1,ai>?ai-1, ai∈D }</p><p><b>  基本操作:</b></p><p><b>  find

85、(&S)</b></p><p>  初始條件:已初始化棧S,且棧為空</p><p>  操作結(jié)果:從棧S中找出相對應(yīng)的數(shù)據(jù)關(guān)系,并輸出結(jié)果</p><p><b>  }ADT Find</b></p><p><b>  程序調(diào)用關(guān)系:</b></p><

86、;p><b>  五、詳細(xì)設(shè)計</b></p><p>  #include<stdio.h></p><p>  #include<stdlib.h></p><p>  typedef enum { ERROR, OK } Status;</p><p>  typedef struct

87、 </p><p><b>  {</b></p><p>  int row, line; </p><p>  }PosType; </p><p>  typedef struct </p><p><b>  

88、{</b></p><p>  int di, ord; //往下一個坐標(biāo)位置的方向 </p><p>  PosType seat; //當(dāng)前的坐標(biāo)位置 </p><p>  }SElemType; </p><p>  typedef struct&l

89、t;/p><p><b>  {</b></p><p>  SElemType * base;</p><p>  SElemType * top;</p><p>  int stacksize;</p><p><b>  }SqStack;</b></

90、p><p>  Status InitStack(SqStack &S); </p><p>  Status Push(SqStack &S,SElemType &a); </p><p>  Status Pop(SqStack &S,SElemType &

91、;a); </p><p>  Status StackEmpty(SqStack S); </p><p>  Status MazePath(int maze[12][12],SqStack &S, PosType start, PosType end); </p><p> 

92、 void Initmaze(int maze[12][12],int size); </p><p>  void printmaze(int maze[12][12],int size); </p><p>  Status Pass(int maze[12][12],PosType CurPos); </p><

93、;p>  void Markfoot(int maze[12][12], PosType CurPos); </p><p>  PosType NextPos(PosType CurPos, int Dir); </p><p>  void printpath(int maze[12][12],SqStack S,int size);</p&g

94、t;<p>  void main (void)</p><p><b>  { </b></p><p>  SqStack S;</p><p>  int size,maze[12][12];</p><p>  printf("#########################數(shù)據(jù)結(jié)構(gòu)

95、課程設(shè)計三 迷宮程序##########################\n") ;</p><p>  printf(" ====== O(∩_∩)O 電信1105 顧嘉鳳 110900501 O(∩_∩)O ======== \n ");</p><p>  for(int n=0;n<10;n++)</p&g

96、t;<p><b>  {</b></p><p>  printf("創(chuàng)建一個迷宮,請輸入迷宮橫向長度(注意不要大于50):\n");</p><p>  scanf("%d",&size);</p><p>  printf("縱向長度:%d\n",size+

97、1);</p><p>  if(size<1 || size>10){printf("輸入錯誤!");return;}</p><p>  Initmaze(maze,size); </p><p>  printmaze(maze,size); </p><p>  Po

98、sType start,end; </p><p>  printf("輸入入口行坐標(biāo)和列坐標(biāo):");scanf("%d",&start.row);scanf("%d",&start.line);</p><p>  printf("輸入出口行坐標(biāo)和列坐標(biāo):");scan

99、f("%d",&end.row);scanf("%d",&end.line);</p><p>  if(MazePath(maze,S,start,end)) </p><p>  printpath(maze,S,size);</p><p>  else printf("找不到通路!\n\n&q

100、uot;);</p><p><b>  }</b></p><p><b>  }</b></p><p>  Status MazePath(int maze[12][12],SqStack &S, PosType start, PosType end) //求解迷宮maze中,從入口start到出口end的一

101、條路徑</p><p><b>  { </b></p><p>  PosType curpos;</p><p>  int curstep;</p><p>  SElemType e;</p><p>  InitStack(S);</p><p>  curpos

102、 = start; </p><p>  curstep = 1; //探索第一部 </p><p><b>  do {</b></p><p>  if (Pass(maze,curpos)) //如果當(dāng)前位置可以通過,即是未曾走到的通道塊

103、 </p><p><b>  { </b></p><p>  Markfoot(maze,curpos); //留下足跡 </p><p>  e.di =1; //創(chuàng)建元素</p><p>  e.ord = curstep;</p><p>

104、  e.seat= curpos;</p><p>  Push(S,e); </p><p>  if (curpos.row==end.row && curpos.line==end.line) </p><p>  return OK; </p>

105、<p>  curpos = NextPos(curpos, 1); //獲得下一節(jié)點:當(dāng)前位置的東鄰</p><p>  curstep++; //探索下一步 </p><p><b>  } </b></p><p>  else //當(dāng)前位置不能通過

106、 </p><p><b>  {</b></p><p>  if (!StackEmpty(S)) </p><p><b>  {</b></p><p><b>  Pop(S,e);</b></p><p> 

107、 while (e.di==8 && !StackEmpty(S))//留下不能通過的標(biāo)記,并退回一步 </p><p><b>  {</b></p><p>  Markfoot(maze,e.seat); </p><p>  Pop(S,e); </p><p><b>  } <

108、/b></p><p>  if (e.di<8 ) </p><p><b>  {</b></p><p>  e.di++; //換一個方向探索 </p><p>  Push(S, e); </p><p>  curpos = Next

109、Pos(e.seat, e.di); //求下一個節(jié)點 </p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p>  } while (!StackEmpty(S));</p>

110、<p>  return ERROR;</p><p><b>  } </b></p><p>  void Initmaze(int maze[12][12],int size)</p><p>  { printf("按行輸入%d*%d數(shù)據(jù),0代表可通,1代表不可通(每行以Enter結(jié)束):\n",si

111、ze,size+1);</p><p>  for(int i=0;i<size+2;i++)maze[0][i]=1;</p><p>  for( i=1;i<size+2;i++)</p><p><b>  {</b></p><p>  maze[i][0]=1;</p><p&

112、gt;  for(int j=1;j<size+1;j++)</p><p>  scanf("%d",&maze[i][j]);</p><p>  maze[i][size+1]=1;</p><p><b>  }</b></p><p>  for(i=0;i<size+2

113、;i++)maze[size+2][i]=1;</p><p><b>  }</b></p><p>  void printmaze(int maze[12][12],int size)</p><p><b>  {</b></p><p>  printf("\n\n")

114、;</p><p>  printf("顯示所建的迷宮(#表示外面的墻):\n");</p><p>  for(int i=0;i<size+2;i++)printf("%c ",'#');printf("\n");</p><p>  for(i=1;i<size+2;i++

115、)</p><p><b>  { </b></p><p>  printf("%c ",'#');</p><p>  for(int j=1;j<size+1;j++)</p><p><b>  {</b></p><p> 

116、 printf("%d ",maze[i][j]);</p><p><b>  }</b></p><p>  printf("%c",'#');</p><p>  printf("\n");</p><p><b>  }<

117、/b></p><p>  for(i=0;i<size+2;i++)printf("%c ",'#');printf("\n");</p><p><b>  }</b></p><p>  void printpath(int maze[12][12],SqStack S,

118、int size)</p><p><b>  { </b></p><p>  printf("\n\n通路路徑為:\n");</p><p>  SElemType * p=S.base;</p><p>  while(p!=S.top)</p><p><b>

119、;  {</b></p><p>  maze[p->seat.row][p->seat.line]=2; </p><p><b>  p++;</b></p><p><b>  }</b></p><p>  for(int i=0;i<size+2;i+

120、+)printf("%c ",'#');printf("\n");</p><p>  for(i=1;i<size+2;i++)</p><p><b>  { </b></p><p>  printf("%c ",'#');</p>

121、;<p>  for(int j=1;j<size+1;j++)</p><p><b>  {</b></p><p>  if(maze[i][j]==2) printf("%c ",'0');</p><p>  else printf(" &q

122、uot;);</p><p><b>  }</b></p><p>  printf("%c",'#');</p><p>  printf("\n");</p><p><b>  }</b></p><p>  f

123、or(i=0;i<size+2;i++)printf("%c ",'#');printf("\n\n");</p><p><b>  }</b></p><p>  Status Pass(int maze[12][12],PosType CurPos)</p><p><b

124、>  {</b></p><p>  if (maze[CurPos.row][CurPos.line]==0)</p><p>  return OK; </p><p>  else return ERROR; </p><p&g

125、t;<b>  }</b></p><p>  void Markfoot(int maze[12][12],PosType CurPos)</p><p><b>  {</b></p><p>  maze[CurPos.row][CurPos.line]=1;</p><p><b>

126、;  }</b></p><p>  PosType NextPos(PosType CurPos, int Dir) </p><p><b>  {</b></p><p>  PosType ReturnPos; </p><p>  switch (Dir) </p><p>

127、<b>  {</b></p><p><b>  case 1:</b></p><p>  ReturnPos.row=CurPos.row;</p><p>  ReturnPos.line=CurPos.line+1;</p><p><b>  break;</b>&

128、lt;/p><p><b>  case 2:</b></p><p>  ReturnPos.row=CurPos.row+1;</p><p>  ReturnPos.line=CurPos.line;</p><p><b>  break;</b></p><p><

129、;b>  case 3:</b></p><p>  ReturnPos.row=CurPos.row;</p><p>  ReturnPos.line=CurPos.line-1;</p><p><b>  break;</b></p><p><b>  case 4:</b&g

130、t;</p><p>  ReturnPos.row=CurPos.row-1;</p><p>  ReturnPos.line=CurPos.line;</p><p><b>  break;</b></p><p><b>  case 5:</b></p><p>

131、  ReturnPos.row=CurPos.row+1;</p><p>  ReturnPos.line=CurPos.line-1;</p><p><b>  break;</b></p><p><b>  case 6:</b></p><p>  ReturnPos.row=CurPo

132、s.row+1;</p><p>  ReturnPos.line=CurPos.line+1;</p><p><b>  break;</b></p><p><b>  case 7:</b></p><p>  ReturnPos.row=CurPos.row-1;</p>&

133、lt;p>  ReturnPos.line=CurPos.line-1;</p><p><b>  break;</b></p><p><b>  case 8:</b></p><p>  ReturnPos.row=CurPos.row-1;</p><p>  ReturnPos.l

134、ine=CurPos.line+1;</p><p><b>  break;</b></p><p><b>  }</b></p><p>  return ReturnPos;</p><p><b>  }</b></p><p>  Statu

135、s InitStack(SqStack &S)</p><p><b>  {</b></p><p>  S.base=(SElemType *)malloc(100*sizeof(SElemType));</p><p>  if(!S.base)return ERROR;</p><p>  S.top=S

136、.base;</p><p>  S.stacksize=100;</p><p>  return OK;</p><p><b>  }</b></p><p>  Status Push(SqStack &S,SElemType &a)</p><p><b>  

137、{</b></p><p>  *S.top++=a;</p><p>  return OK;</p><p><b>  }</b></p><p>  Status Pop(SqStack &S,SElemType &a)</p><p><b>  {

138、</b></p><p>  if(S.top==S.base)return ERROR;</p><p>  a=*--S.top;</p><p>  return OK;</p><p><b>  }</b></p><p>  Status StackEmpty(SqStac

139、k S)</p><p><b>  {</b></p><p>  if(S.top==S.base)return OK;</p><p>  return ERROR;}</p><p><b>  六、調(diào)試分析:</b></p><p>  用switch()解決了點

140、移動方向問題</p><p><b>  七、用戶手冊</b></p><p>  1)演示程序的運行環(huán)境為Windows 7系統(tǒng),Microsoft Visual Studio 6.0中的Microsoft Visual c++ 6.0中運行,執(zhí)行文件為迷宮求解.exe</p><p>  2)進入演示程序后即顯示DOS形式的界面:</

溫馨提示

  • 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

提交評論