迷宮求解數(shù)據(jù)結構課程設計_第1頁
已閱讀1頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  《數(shù)據(jù)結構》課程設計</p><p>  題 目: 迷宮求解 </p><p>  班 級: </p><p>  學 號: </p><p>  作者姓名: </p><p>  指

2、導教師: </p><p>  2012年12月11日</p><p><b>  目 錄</b></p><p>  1.需求分析…………………………………………….…….…..……1</p><p>  2.概要設計…………………………………………….….……..……1</p

3、><p>  2.1.數(shù)據(jù)結構………………………………………….……..……1</p><p>  2.1.1.邏輯結構…………………………..………..…..…….1</p><p>  2.1.1.存儲結構…………………………………..…....….…2</p><p>  2.2.基本操作…………………………………………..…...…….…

4、3</p><p>  2.2.1.迷宮中棧的基本操作………………………….…....….3</p><p>  2.2.2.迷宮的抽象數(shù)據(jù)類型…………………………..………3</p><p>  2.2.3.本程序包含三個模塊…………………….......….….….4</p><p>  3.詳細設計……………………………………………..

5、…… ….……5</p><p>  4.調(diào)試與分析………………………………………..… …….………9</p><p>  5.用戶手冊……………………………………………………………9</p><p>  6. 測試結果…………………………………………………………….10</p><p>  7. 附錄…………………………………………………

6、……………….12</p><p>  8. 參考文獻…………………………………………………………….12</p><p>  9、心得體會……………………………………………………………12</p><p>  10、小組成員工作分配………………………………………………..13</p><p><b>  需求分析</b>

7、;</p><p>  以二維數(shù)組maze[n+2][m+2]表示迷宮,其中:maze[0][j]和maze[n+1][j](0<=j<=m+1)及maze[i][0]和maze[i][m+1](0<=i<=j+1)為添加的一圈障礙。數(shù)組中以元素值為0的表示通路,1表示障礙,限定迷宮的大小,m,n<=0。</p><p>  迷宮的入口位置和出口位置可由用戶自

8、行設定。</p><p>  如設定的迷宮處在通路,則值輸出迷宮中的通路,即0,現(xiàn)實的0連起來就是一個迷宮通路路徑;如設定的迷宮中不出在通路,則輸出“該迷宮找不到通路!”;</p><p>  測試樣例:輸入迷宮的長寬為5和6,輸入迷宮為:</p><p>  1 0 0 1 1 1</p><p>  0 0 1 1 1 1</p&g

9、t;<p>  1 0 0 0 1 1</p><p>  0 1 0 1 1 1</p><p>  1 1 0 0 0 0</p><p>  當入口位置為(1,2),出口位置為(5,6)時,則輸出數(shù)據(jù)為:</p><p>  # # # # # # # #</p><p>  # 0

10、 #</p><p>  # 0 #</p><p>  # 0 0 #</p><p>  # 0 #</p><p>  # 0 0 0 0 #</p><p>  # # # # # # # #</p><p><b

11、>  程序執(zhí)行的命令為:</b></p><p>  輸入迷宮的尺寸;2、創(chuàng)建迷宮;3、輸入迷宮的的出入口位置;</p><p>  4、求解迷宮;輸出迷宮的解。</p><p><b>  概要設計</b></p><p><b>  2.1.數(shù)據(jù)結構</b></p>

12、<p>  2.1.1、邏輯結構</p><p>  1)棧的定義:限定僅在表尾進行插入或刪除操作的線性表;</p><p>  2)操作特性:后進先出;</p><p><b>  3) ADT定義:</b></p><p>  ADT Stack{</p><p>  數(shù)據(jù)對象:

13、D={ai|ai∈CharSet,i=1,2,…,n,n>=0}</p><p>  數(shù)據(jù)關系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,…,n}</p><p><b>  基本操作:</b></p><p>  InitStack(&S)</p><p>  操作結果:構造一個

14、空棧S。</p><p>  DestroyStack(&S)</p><p>  初始條件:棧S 已存在。</p><p>  操作結果:銷毀棧S。</p><p>  ClearStack(&S)</p><p>  初始條件:棧S 已存在。</p><p>  操作結果:將

15、 S 清為空棧。</p><p>  StackLength(&S)</p><p>  初始條件:棧S 已存在。</p><p>  操作結果:返回棧 S 的長度。</p><p>  StackEmpty(&S)</p><p>  初始條件:棧S 已存在。</p><p>

16、  操作結果:若 S 為空棧,則返回TRUE,否則返回FALSE。</p><p>  GetTop(S,&e)</p><p>  初始條件:棧S 已存在。</p><p>  操作結果:若棧 S 不空,則以e 返回棧頂元素。</p><p>  Push(&S,e)</p><p>  初始條件:棧

17、S 已存在。</p><p>  操作結果:在棧 S 的棧頂插入新的棧頂元素e。</p><p>  Pop(&S,&e)</p><p>  初始條件:棧S 已存在。</p><p>  操作結果:刪除 S 的棧頂元素,并以e 返回其值。</p><p>  StackTraverse(S,visit

18、())</p><p>  初始條件:棧S 已存在。</p><p>  操作結果:從棧底到棧頂依次對 S 中的每個元素調(diào)用函數(shù)visit( )。</p><p>  }ADT Stack</p><p>  2.1.2、存儲結構</p><p><b>  1)順序存儲結構:</b></p

19、><p>  順序棧:是利用一塊地址連續(xù)的存儲單元來存放棧中的元素,同時要利用一個指針top 來指示棧頂元素的位置。</p><p>  注:在本迷宮求解程序設計中用到的就是棧的順序存儲結構。</p><p>  //----- 棧的順序存儲表示 -----</p><p>  #define STACK_INIT_SIZE 100; </

20、p><p>  #define STACKINCREMENT 10; </p><p>  typedef struct{ </p><p>  SElemType *base; </p><p>  SElemType *top;</p><p>  int stacksize;</p><p

21、><b>  }SqStack;</b></p><p><b>  2)鏈式存儲結構</b></p><p>  鏈式棧:鏈棧是指采用鏈式存儲結構存儲的棧。</p><p>  鏈棧是一種特殊的單鏈表,即限定僅在表頭進行插入和刪除操作的單鏈表,因此鏈棧的結點結構與單鏈表的結點結構相同。</p><

22、;p><b>  2.2、基本操作</b></p><p>  2.2.1、迷宮中棧的基本操作:</p><p><b>  基本操作:</b></p><p>  InitStack(&S)</p><p>  操作結果:構造一個空棧S。</p><p>  

23、StackEmpty(&S)</p><p>  初始條件:棧S 已存在。</p><p>  操作結果:若 S 為空棧,則返回TRUE,否則返回FALSE。</p><p>  GetTop(S,&e)</p><p>  初始條件:棧S 已存在。</p><p>  操作結果:若棧 S 不空,則以e

24、 返回棧頂元素。</p><p>  Push(&S,e)</p><p>  初始條件:棧S 已存在。</p><p>  操作結果:在棧 S 的棧頂插入新的棧頂元素e。</p><p>  Pop(&S,&e)</p><p>  初始條件:棧S 已存在。</p><p&

25、gt;  操作結果:刪除 S 的棧頂元素,并以e 返回其值。</p><p>  2.2.2、迷宮的抽象數(shù)據(jù)類型</p><p>  ADT MazeType{</p><p>  數(shù)據(jù)對象 : D={ai,j|ai,j∈{‘ ’,‘#’、‘@’、‘*’},0<=i<=n+1, 0<=j<=m+1,m,n<=20} </p>

26、<p>  數(shù)據(jù)關系 :R={ROW,LINE}</p><p>  ROW={<ai-1,j,ai,j>|ai-1,j,ai,j∈D,i=1,…,m+1,j=0,…,n+1}</p><p>  LINE={<ai-1,j,ai,j>|ai-1,j,ai,j∈D,i=1,…,m+1,j=0,…,n+1}</p><p><

27、;b>  基本操作 :</b></p><p>  Status Pass(MazeType &maze,PosType curpos)</p><p>  初始條件: maze 存在迷宮, curpos 保存了當前位置的坐標</p><p>  操作結果: 如果可通,返回真,否則為假</p><p>  void

28、FootPrint(MazeType &maze,PosType curpos)</p><p>  初始條件: maze 存在迷宮, curpos 保存了當前位置的坐標</p><p>  操作結果: 將當前坐標curpos處的maze[][]值記為 足跡</p><p>  PosType NextPos(PosType CurPos,int di)&l

29、t;/p><p>  初始條件: 各參數(shù)值已經(jīng)定義</p><p>  操作結果: 求得以當前位置為棧頂?shù)南乱粋€方向的元素的坐標</p><p>  Status MazePath(SqStack &S, PosType start, PosType end) 初始條件: maze 存在迷宮地圖</p><p>  操作結果:

30、為建立的迷宮找到一條路徑</p><p>  }ADT maze;</p><p>  2.2.3、本程序包含三個模塊</p><p><b>  1)主函數(shù)模塊:</b></p><p>  int main()</p><p><b>  {</b></p>

31、<p><b>  初始化迷宮;</b></p><p><b>  求解迷宮;</b></p><p><b>  輸出迷宮的解;</b></p><p><b>  return 0;</b></p><p><b>  }<

32、;/b></p><p>  2)棧實現(xiàn)模塊—實現(xiàn)棧的抽象殊絕類型</p><p>  3)迷宮實現(xiàn)模塊—實現(xiàn)迷宮的抽象數(shù)據(jù)類型</p><p>  各模塊的調(diào)用關系如下:</p><p>  主函數(shù)模塊——>迷宮模塊——>棧模塊</p><p>  4)求解迷宮中一條通路的偽碼算法:</p&g

33、t;<p>  設定當前位置的初值為入口位置;</p><p><b>  do{</b></p><p><b>  若當前位置可通,</b></p><p><b>  則{</b></p><p>  將當前位置插入棧頂; //納入路徑</p>

34、<p>  若該位置是出口位置,則結束; //求得路徑存放在棧中</p><p>  否則切換當前位置的東鄰方塊為新的當前位置;</p><p><b>  }</b></p><p><b>  否則{</b></p><p>  若棧不空且棧位置尚有其他方向未被探索,</p&g

35、t;<p>  則設定新的當前位置為沿順時針方向旋轉找到的棧頂位置的下一相鄰塊;</p><p>  若棧不空但棧頂位置的四周均不可通,</p><p>  則{刪去棧頂位置; //后退一步,從路徑中刪去該通道塊;</p><p>  若棧不空,則重新測試新的棧頂位置;</p><p>  直到找到一個可通的相鄰塊或出棧至棧空;

36、</p><p><b>  }</b></p><p><b>  }</b></p><p>  }while(棧不空);</p><p>  {棧空說明沒有路徑存在}</p><p><b>  詳細設計</b></p><p&

37、gt;<b>  坐標位置類型</b></p><p>  typedef struct</p><p><b>  {</b></p><p><b>  int row;</b></p><p><b>  int line;</b></p>

38、;<p><b>  }PosType;</b></p><p><b>  迷宮類型</b></p><p>  Status Pass(PosType CurPos)</p><p>  //判定當前位置是否可以通過,即是未曾走到過的通道塊</p><p>  void FootP

39、rint(PosType CurPos)</p><p>  //給當前可通過的位置標記</p><p>  PosType NextPos(PosType CurPos,int di)</p><p>  //探尋下一個位置,并標記方向</p><p>  Status MazePath(SqStack &S, PosType st

40、art, PosType end)</p><p>  //求解迷宮maze中,從入口start到出口end的一條路徑,</p><p>  //如存在,返回OK,否則返回ERROR</p><p><b>  棧類型</b></p><p>  typedef struct</p><p>&l

41、t;b>  {</b></p><p>  int ord; //通道塊在路徑上的“序號”</p><p>  int di; //通道塊在迷宮中的“坐標位置”</p><p>  PosType seat;//從此通道塊走向下一通道塊的“方向”</p><p>  }SElemType; //

42、棧的元素類型</p><p>  typedef struct</p><p><b>  {</b></p><p>  SElemType *base;//在構造棧之前和銷毀之后,base的值為NULL</p><p>  SElemType *top; //棧頂指針</p><p>  in

43、t stacksize; //當前已分配的存儲空間,以元素為單位</p><p>  }SqStack;//棧定義</p><p><b>  棧的基本操作如下:</b></p><p>  void InitStack(SqStack &S)</p><p>  //初始化棧,設棧S為空棧(S.top=NUL

44、L)</p><p>  void Push(SqStack &S,SElemType e)</p><p>  //若分配空間成功,則在S 的棧頂插入新的棧頂元素e</p><p>  //否則增加棧棧的存儲空間,再插入新的元素</p><p>  int GetTop(SqStack &S,SElemType e)<

45、/p><p>  //若棧S不空,則以e帶回棧頂元素并返回TRUE,否則返回FALSE</p><p>  int Pop(SqStack &S,SElemType &e)</p><p>  //若棧不空,則刪除S 的棧頂元素并以e 帶回其值,且返回TRUE</p><p>  //否則返回FALSE</p>&l

46、t;p>  int StackEmpty(SqStack S)</p><p>  //若S為空棧(S.top==NULL),則返回TRUE;否則返回FALSE</p><p>  具體部分操作的算法如下:</p><p>  void InitStack(SqStack &S)</p><p><b>  {<

47、/b></p><p>  //初始化棧S為空棧(S.top=NULL)</p><p>  S.base=(SElemType *)malloc(STACK_INIT_SIZE *sizeof(SElemType));</p><p>  if(!S.base) exit(OVERFLOW);</p><p>  S.top=S.ba

48、se;</p><p>  S.stacksize=STACK_INIT_SIZE;</p><p>  }//Initstack</p><p>  void Push(SqStack &S,SElemType e)</p><p><b>  {</b></p><p>  //若分配

49、空間成功,則在S 的棧頂插入新的棧頂元素e</p><p>  //否則增加棧棧的存儲空間,再插入新的元素</p><p>  if(S.top-S.base>=S.stacksize)</p><p><b>  {</b></p><p>  S.base=(SElemType *)realloc(S.base

50、,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));</p><p>  if(!S.base) exit(OVERFLOW);</p><p>  S.top=S.base+S.stacksize;</p><p>  S.stacksize+=STACKINCREMENT;</p><p>&

51、lt;b>  }</b></p><p>  *S.top++=e;</p><p><b>  }//Push</b></p><p>  求解迷宮的偽碼算法:</p><p>  Status MazePath(SqStack &S, PosType start, PosType end)

52、</p><p><b>  { </b></p><p>  //若迷宮maze中存在從入口start到出口end的通道,則</p><p>  //一條存放在棧中(從棧底到棧頂為從入口到出口的路徑),并返</p><p>  //回OK,否則返回ERROR</p><p>  PosType

53、curpos;</p><p>  int curstep;</p><p>  SElemType e;</p><p>  InitStack(S);</p><p>  curpos = start;//設定“當前位置”為“初始位置” </p><p>  curste

54、p = 1; //探索第一步 </p><p><b>  do {</b></p><p>  if (Pass(curpos)) </p><p><b>  { </b></p><p>  //當前位置可以通過,即是未曾

55、走到過的的通道塊//留下足跡</p><p>  FootPrint(curpos); </p><p><b>  e.di =1;</b></p><p>  e.ord = curstep;</p><p>  e.seat= curpos;</p><p>  Push(S,

56、e); //加入路徑 </p><p>  if (curpos.row==end.row && curpos.line==end.line) return OK; //到達出口位置 </p><p>  curpos = NextPos(curpos, 1); </p><

57、;p>  curstep++;//探索下一步</p><p><b>  } </b></p><p>  else //當前位置不能通過 </p><p><b>  {</b></p><p>  if (!StackEmpty(S)

58、) </p><p><b>  {</b></p><p><b>  Pop(S,e);</b></p><p>  while (e.di==4 && !StackEmpty(S)) </p><p><b>  {</b></p><

59、p>  FootPrint(e.seat); </p><p>  Pop(S,e); </p><p>  curstep--; </p><p><b>  } </b></p><p>  if (e.di<4) </p><p><b>  {</b>

60、</p><p>  e.di++; </p><p>  Push(S, e); </p><p>  curpos = NextPos(e.seat, e.di); </p><p><b>  } //if</b></p><p><b>

61、;  } //if</b></p><p><b>  } </b></p><p>  } while (!StackEmpty(S));</p><p>  return ERROR;</p><p>  }//MazePath</p><p>  主函數(shù)和其它函數(shù)的偽碼算法<

62、;/p><p>  void printpath(SqStack S,int n,int m)</p><p><b>  {//打印路徑</b></p><p>  printf("\n\n通路路徑為:\n");</p><p>  //PosType start,end;</p><

63、;p>  SElemType * p=S.base;//定義一個指針p指向棧中的元素,設//定初值為p=S.base</p><p>  while(p!=S.top)</p><p><b>  {</b></p><p>  maze[p->seat.row][p->seat.line]=2;</p><

64、;p>  p++;//將有效路徑的通道塊全部標記為2或其他不為1或0的//值</p><p><b>  }</b></p><p>  int i,flag=0;//打印出路徑,周圍用“#”圍成一圈作圍墻</p><p>  for(i=0;i<m+2;i++)printf("%c ",'#')

65、;printf("\n");</p><p>  for(i=1;i<n+1;i++)</p><p><b>  { </b></p><p>  printf("%c ",'#');</p><p>  for(int j=1;j<m+1;j++)&

66、lt;/p><p><b>  {</b></p><p>  if(maze[i][j]==2) printf("%c ",'0');</p><p>  else printf(" ");</p><p><b>  }<

67、/b></p><p>  printf("%c",'#');</p><p>  printf("\n");</p><p><b>  }</b></p><p>  for(i=0;i<m+2;i++)printf("%c ",

68、'#');printf("\n\n");</p><p>  }//printpath</p><p>  int main()</p><p><b>  {//主函數(shù)</b></p><p>  SqStack S;</p><p><b>  i

69、nt r,l;</b></p><p>  while(true)</p><p><b>  {</b></p><p>  printf("創(chuàng)建一個迷宮,請輸入迷宮長和寬(不得大于20):\n");</p><p>  scanf("%d%d",&r,&am

70、p;l);if(r<1 || r>20||l<1||l>20){printf("輸入錯誤!");}</p><p><b>  int i;</b></p><p>  printf("按行輸入%d*%d數(shù)據(jù)(0代表可通,1代表不可通):\n",r,l);</p><p>  fo

71、r(i=0;i<l+2;i++)maze[0][i]=1;</p><p>  for(i=1;i<r+1;i++)</p><p><b>  {</b></p><p>  maze[i][0]=1;</p><p>  for(int j=1;j<l+1;j++)</p><p

72、>  scanf("%d",&maze[i][j]);</p><p>  maze[i][l+1]=1;</p><p><b>  }</b></p><p>  for(i=0;i<l+2;i++)maze[r+1][i]=1;</p><p>  PosType start

73、,end;</p><p>  printf("輸入入口行坐標和列坐標:");scanf("%d",&start.row);scanf("%d",&start.line);</p><p>  printf("輸入出口行坐標和列坐標:");scanf("%d",&en

74、d.row);scanf("%d",&end.line);</p><p>  if(MazePath(S,start,end)) </p><p>  printpath(S,r,l);</p><p>  else printf("該迷宮找不到通路!\n\n");</p><p><b

75、>  }</b></p><p><b>  return 0;</b></p><p><b>  }//main</b></p><p><b>  調(diào)試分析</b></p><p>  1、在本次的程序設計中,最核心的算法就是MazePath()函數(shù),其

76、他的算法并沒有出現(xiàn)什么問題。不過在最后輸出的時候本來想輸出路徑的先后順序,即maze[1][2]----->maze[2][2]----->maze[3][2]----->maze[3][3]----->maze[4][3]-----></p><p>  maze[5][3]----->maze[5][4]----->maze[5][5]----->maze[5]

77、[6],但是最后發(fā)現(xiàn)這樣只有在入口在左上角,出口在右下角時,才可以正確輸出。但是入口和出口是隨機的,若是入口在右下角,出口在左上角,則也同樣輸出maze[1][2]----->maze[2][2]----->maze[3][2]----->maze[3][3]----->maze[4][3]-----></p><p>  maze[5][3]----->maze[5][4]-

78、---->maze[5][5]----->maze[5][6],雖然這兩個路徑是一樣的,但是有先后順序,故最后沒有輸出這種形式,將這段代碼注釋了(源程序中有注釋的代碼);</p><p>  2、本來是想設計成既可以手動輸入迷宮又可以自動生成迷宮,但是感覺沒有太大的用處,所以最后省略了,只保留了手動輸入。</p><p>  3、在整個編寫的過程中,出現(xiàn)過很多錯誤,包括一些標點

79、符號的小錯誤,但是借助DEBUG調(diào)試器和數(shù)據(jù)觀察窗口,很快找出來問題的所在。</p><p><b>  用戶手冊</b></p><p>  本程序的運行環(huán)境為 DOS 操作系統(tǒng), 執(zhí)行文件為:迷宮求解.exe.</p><p>  進入演示程序后 , 即顯示文本方式的用戶界面:</p><p>  根據(jù)提示輸入迷宮大

80、小及迷宮后,輸入迷宮的行和列,回車后即可得到所 輸入迷宮的解或者是顯示“該迷宮找不到通路!”字樣。</p><p><b>  測試結果</b></p><p>  輸入長寬為5,6,入口為(1,2),出口為(5,6)的迷宮</p><p>  1 0 0 1 1 1</p><p>  0 0 1

81、1 1 1</p><p>  1 0 0 0 1 1</p><p>  0 1 0 1 1 1</p><p>  1 1 0 0 0 0</p><p><b>  求解結果:</b></p><p>  輸入長寬為4,5,入口為(1,1),出口為(4,5)的迷宮</p>&l

82、t;p><b>  0 1 0 1 1</b></p><p><b>  0 0 1 1 0</b></p><p><b>  1 0 1 1 1</b></p><p><b>  1 0 0 0 0</b></p><p><b>

83、  輸出結果為:</b></p><p>  輸入長寬為4,5,入口為(1,1),出口為(4,5)的迷宮</p><p>  1 1 0 1 1 1</p><p>  0 1 0 1 0 1</p><p>  1 0 0 0 1 1</p><p>  0 1 0 1 1 1</p>&l

84、t;p>  1 1 0 0 0 0</p><p><b>  輸出結果為:</b></p><p><b>  附錄</b></p><p><b>  源程序文件名清單:</b></p><p><b>  主函數(shù).cpp</b></p&g

85、t;<p><b>  迷宮的實現(xiàn).h</b></p><p><b>  棧的實現(xiàn).h</b></p><p><b>  參考文獻</b></p><p>  1、嚴蔚敏,吳偉民.數(shù)據(jù)結構(C語言版)[M].北京:清華大學出版社,2012.</p><p> 

86、 2、嚴蔚敏,吳偉民,米寧.數(shù)據(jù)結構題集(C語言版)[M].北京:清華大學出版社,2012.</p><p>  3、蘇仕華,魏韋巍,王敬生,劉燕君.數(shù)據(jù)結構課程設計[M].北京:機械工業(yè)出版社,2010.</p><p><b>  心得體會</b></p><p>  做了這次程序設計,我們發(fā)現(xiàn)利用數(shù)據(jù)結構進行程序設計并不像想像中的那么高深

87、,像我們現(xiàn)在所做的,只是一些最基本的程序。經(jīng)過一個學期的學習,對數(shù)據(jù)結構有了一個初步的認識,但沒有進行實際應用。這次程序設計,就相當于對一個學期的所學做一個總結,再進行一次綜合運用,更是學到了很多新的東西,無意中也提升了自己的程序設計水平;在程序設計過程中碰到了很多問題,通過上網(wǎng)查資料等各種手段,我們的解決實際問題的能力也得到了提高。這次的程序設計,讓我們對程序設計有了一個更全面的認識,如果我們以后能在編程領域深入發(fā)展,這一次也算是我們

溫馨提示

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

評論

0/150

提交評論