![迷宮求解數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_第1頁](http://file4.renrendoc.com/view/ee352e971b1f2eab17af528c1791a427/ee352e971b1f2eab17af528c1791a4271.gif)
![迷宮求解數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_第2頁](http://file4.renrendoc.com/view/ee352e971b1f2eab17af528c1791a427/ee352e971b1f2eab17af528c1791a4272.gif)
![迷宮求解數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_第3頁](http://file4.renrendoc.com/view/ee352e971b1f2eab17af528c1791a427/ee352e971b1f2eab17af528c1791a4273.gif)
![迷宮求解數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_第4頁](http://file4.renrendoc.com/view/ee352e971b1f2eab17af528c1791a427/ee352e971b1f2eab17af528c1791a4274.gif)
![迷宮求解數(shù)據(jù)結(jié)構(gòu)課程設(shè)計_第5頁](http://file4.renrendoc.com/view/ee352e971b1f2eab17af528c1791a427/ee352e971b1f2eab17af528c1791a4275.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
頁需求分析以二維數(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。迷宮的入口位置和出口位置可由用戶自行設(shè)定。如設(shè)定的迷宮處在通路,則值輸出迷宮中的通路,即0,現(xiàn)實的0連起來就是一個迷宮通路路徑;如設(shè)定的迷宮中不出在通路,則輸出“該迷宮找不到通路!”;測試樣例:輸入迷宮的長寬為5和6,輸入迷宮為:100111001111100011010111110000當入口位置為(1,2),出口位置為(5,6)時,則輸出數(shù)據(jù)為:#########0##0##00##0##0000#########程序執(zhí)行的命令為:輸入迷宮的尺寸;2、創(chuàng)建迷宮;3、輸入迷宮的的出入口位置;4、求解迷宮;輸出迷宮的解。概要設(shè)計2.1.數(shù)據(jù)結(jié)構(gòu)2.1.1、邏輯結(jié)構(gòu)1)棧的定義:限定僅在表尾進行插入或刪除操作的線性表;2)操作特性:后進先出;3)ADT定義:ADTStack{數(shù)據(jù)對象:D={ai|ai∈CharSet,i=1,2,…,n,n>=0}數(shù)據(jù)關(guān)系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,…,n}基本操作:InitStack(&S)操作結(jié)果:構(gòu)造一個空棧S。DestroyStack(&S)初始條件:棧S已存在。操作結(jié)果:銷毀棧S。ClearStack(&S)初始條件:棧S已存在。操作結(jié)果:將S清為空棧。StackLength(&S)初始條件:棧S已存在。操作結(jié)果:返回棧S的長度。StackEmpty(&S)初始條件:棧S已存在。操作結(jié)果:若S為空棧,則返回TRUE,否則返回FALSE。GetTop(S,&e)初始條件:棧S已存在。操作結(jié)果:若棧S不空,則以e返回棧頂元素。Push(&S,e)初始條件:棧S已存在。操作結(jié)果:在棧S的棧頂插入新的棧頂元素e。Pop(&S,&e)初始條件:棧S已存在。操作結(jié)果:刪除S的棧頂元素,并以e返回其值。StackTraverse(S,visit())初始條件:棧S已存在。操作結(jié)果:從棧底到棧頂依次對S中的每個元素調(diào)用函數(shù)visit()。}ADTStack2.1.2、存儲結(jié)構(gòu)1)順序存儲結(jié)構(gòu):順序棧:是利用一塊地址連續(xù)的存儲單元來存放棧中的元素,同時要利用一個指針top來指示棧頂元素的位置。注:在本迷宮求解程序設(shè)計中用到的就是棧的順序存儲結(jié)構(gòu)。//棧的順序存儲表示#defineSTACK_INIT_SIZE100;#defineSTACKINCREMENT10;typedefstruct{SElemType*base;SElemType*top;intstacksize;}SqStack;2)鏈式存儲結(jié)構(gòu)鏈式棧:鏈棧是指采用鏈式存儲結(jié)構(gòu)存儲的棧。鏈棧是一種特殊的單鏈表,即限定僅在表頭進行插入和刪除操作的單鏈表,因此鏈棧的結(jié)點結(jié)構(gòu)與單鏈表的結(jié)點結(jié)構(gòu)相同。2.2、基本操作2.2.1、迷宮中棧的基本操作:基本操作:InitStack(&S)操作結(jié)果:構(gòu)造一個空棧S。StackEmpty(&S)初始條件:棧S已存在。操作結(jié)果:若S為空棧,則返回TRUE,否則返回FALSE。GetTop(S,&e)初始條件:棧S已存在。操作結(jié)果:若棧S不空,則以e返回棧頂元素。Push(&S,e)初始條件:棧S已存在。操作結(jié)果:在棧S的棧頂插入新的棧頂元素e。Pop(&S,&e)初始條件:棧S已存在。操作結(jié)果:刪除S的棧頂元素,并以e返回其值。2.2.2、迷宮的抽象數(shù)據(jù)類型ADTMazeType{數(shù)據(jù)對象:D={ai,j|ai,j∈{‘’,‘#’、‘@’、‘*’},0<=i<=n+1,0<=j<=m+1,m,n<=20} 數(shù)據(jù)關(guān)系:R={ROW,LINE}ROW={<ai-1,j,ai,j>|ai-1,j,ai,j∈D,i=1,…,m+1,j=0,…,n+1}LINE={<ai-1,j,ai,j>|ai-1,j,ai,j∈D,i=1,…,m+1,j=0,…,n+1} 基本操作:StatusPass(MazeType&maze,PosTypecurpos) 初始條件:maze存在迷宮,curpos保存了當前位置的坐標 操作結(jié)果:如果可通,返回真,否則為假voidFootPrint(MazeType&maze,PosTypecurpos) 初始條件:maze存在迷宮,curpos保存了當前位置的坐標 操作結(jié)果:將當前坐標curpos處的maze[][]值記為足跡PosTypeNextPos(PosTypeCurPos,intdi) 初始條件:各參數(shù)值已經(jīng)定義操作結(jié)果:求得以當前位置為棧頂?shù)南乱粋€方向的元素的坐標StatusMazePath(SqStack&S,PosTypestart,PosTypeend) 初始條件:maze存在迷宮地圖操作結(jié)果:為建立的迷宮找到一條路徑}ADTmaze;2.2.3、本程序包含三個模塊1)主函數(shù)模塊:intmain(){初始化迷宮;求解迷宮;輸出迷宮的解;return0;}2)棧實現(xiàn)模塊—實現(xiàn)棧的抽象殊絕類型3)迷宮實現(xiàn)模塊—實現(xiàn)迷宮的抽象數(shù)據(jù)類型各模塊的調(diào)用關(guān)系如下:主函數(shù)模塊——>迷宮模塊——>棧模塊4)求解迷宮中一條通路的偽碼算法:設(shè)定當前位置的初值為入口位置;do{ 若當前位置可通, 則{將當前位置插入棧頂;//納入路徑 若該位置是出口位置,則結(jié)束;//求得路徑存放在棧中 否則切換當前位置的東鄰方塊為新的當前位置;}否則{若棧不空且棧位置尚有其他方向未被探索,則設(shè)定新的當前位置為沿順時針方向旋轉(zhuǎn)找到的棧頂位置的下一相鄰塊;若棧不空但棧頂位置的四周均不可通,則{刪去棧頂位置;//后退一步,從路徑中刪去該通道塊;若棧不空,則重新測試新的棧頂位置;直到找到一個可通的相鄰塊或出棧至棧空;}}}while(棧不空);{棧空說明沒有路徑存在}詳細設(shè)計坐標位置類型typedefstruct{ introw; intline;}PosType;迷宮類型StatusPass(PosTypeCurPos)//判定當前位置是否可以通過,即是未曾走到過的通道塊voidFootPrint(PosTypeCurPos)//給當前可通過的位置標記PosTypeNextPos(PosTypeCurPos,intdi)//探尋下一個位置,并標記方向StatusMazePath(SqStack&S,PosTypestart,PosTypeend)//求解迷宮maze中,從入口start到出口end的一條路徑,//如存在,返回OK,否則返回ERROR棧類型typedefstruct{ intord;//通道塊在路徑上的“序號” intdi;//通道塊在迷宮中的“坐標位置” PosTypeseat;//從此通道塊走向下一通道塊的“方向”}SElemType;//棧的元素類型typedefstruct{ SElemType*base;//在構(gòu)造棧之前和銷毀之后,base的值為NULL SElemType*top;//棧頂指針 intstacksize;//當前已分配的存儲空間,以元素為單位}SqStack;//棧定義棧的基本操作如下:voidInitStack(SqStack&S)//初始化棧,設(shè)棧S為空棧(S.top=NULL)voidPush(SqStack&S,SElemTypee)//若分配空間成功,則在S的棧頂插入新的棧頂元素e//否則增加棧棧的存儲空間,再插入新的元素intGetTop(SqStack&S,SElemTypee)//若棧S不空,則以e帶回棧頂元素并返回TRUE,否則返回FALSEintPop(SqStack&S,SElemType&e)//若棧不空,則刪除S的棧頂元素并以e帶回其值,且返回TRUE//否則返回FALSEintStackEmpty(SqStackS)//若S為空棧(S.top==NULL),則返回TRUE;否則返回FALSE具體部分操作的算法如下:voidInitStack(SqStack&S){//初始化棧S為空棧(S.top=NULL) S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S.base)exit(OVERFLOW); S.top=S.base; S.stacksize=STACK_INIT_SIZE;}//InitstackvoidPush(SqStack&S,SElemTypee){//若分配空間成功,則在S的棧頂插入新的棧頂元素e//否則增加棧棧的存儲空間,再插入新的元素 if(S.top-S.base>=S.stacksize) { S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S.base)exit(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *S.top++=e;}//Push求解迷宮的偽碼算法:StatusMazePath(SqStack&S,PosTypestart,PosTypeend){//若迷宮maze中存在從入口start到出口end的通道,則//一條存放在棧中(從棧底到棧頂為從入口到出口的路徑),并返//回OK,否則返回ERROR PosTypecurpos; intcurstep; SElemTypee; InitStack(S); curpos=start;//設(shè)定“當前位置”為“初始位置” curstep=1;//探索第一步 do{ if(Pass(curpos)) {//當前位置可以通過,即是未曾走到過的的通道塊//留下足跡 FootPrint(curpos); e.di=1; e.ord=curstep; e.seat=curpos; Push(S,e);//加入路徑 if(curpos.row==end.row&&curpos.line==end.line)returnOK;//到達出口位置 curpos=NextPos(curpos,1); curstep++;//探索下一步 } else//當前位置不能通過 { if(!StackEmpty(S)) { Pop(S,e); while(e.di==4&&!StackEmpty(S)) { FootPrint(e.seat); Pop(S,e);curstep--; } if(e.di<4) { e.di++; Push(S,e); curpos=NextPos(e.seat,e.di); }//if }//if } }while(!StackEmpty(S)); returnERROR;}//MazePath主函數(shù)和其它函數(shù)的偽碼算法voidprintpath(SqStackS,intn,intm){//打印路徑 printf("\n\n通路路徑為:\n"); //PosTypestart,end;SElemType*p=S.base;//定義一個指針p指向棧中的元素,設(shè)//定初值為p=S.base while(p!=S.top) { maze[p->seat.row][p->seat.line]=2; p++;//將有效路徑的通道塊全部標記為2或其他不為1或0的//值 } inti,flag=0;//打印出路徑,周圍用“#”圍成一圈作圍墻 for(i=0;i<m+2;i++)printf("%c",'#');printf("\n"); for(i=1;i<n+1;i++) { printf("%c",'#'); for(intj=1;j<m+1;j++) { if(maze[i][j]==2)printf("%c",'0'); elseprintf(""); } printf("%c",'#'); printf("\n"); } for(i=0;i<m+2;i++)printf("%c",'#');printf("\n\n");}//printpathintmain(){//主函數(shù) SqStackS; intr,l; while(true) { printf("創(chuàng)建一個迷宮,請輸入迷宮長和寬(不得大于20):\n"); scanf("%d%d",&r,&l);if(r<1||r>20||l<1||l>20){printf("輸入錯誤!");} inti; printf("按行輸入%d*%d數(shù)據(jù)(0代表可通,1代表不可通):\n",r,l); for(i=0;i<l+2;i++)maze[0][i]=1; for(i=1;i<r+1;i++) { maze[i][0]=1; for(intj=1;j<l+1;j++) scanf("%d",&maze[i][j]); maze[i][l+1]=1; } for(i=0;i<l+2;i++)maze[r+1][i]=1; PosTypestart,end; printf("輸入入口行坐標和列坐標:");scanf("%d",&start.row);scanf("%d",&start.line); printf("輸入出口行坐標和列坐標:");scanf("%d",&end.row);scanf("%d",&end.line); if(MazePath(S,start,end)) printpath(S,r,l); elseprintf("該迷宮找不到通路!\n\n"); } return0;}//main調(diào)試分析1、在本次的程序設(shè)計中,最核心的算法就是MazePath()函數(shù),其他的算法并沒有出現(xiàn)什么問題。不過在最后輸出的時候本來想輸出路徑的先后順序,即maze[1][2]>maze[2][2]>maze[3][2]>maze[3][3]>maze[4][3]>maze[5][3]>maze[5][4]>maze[5][5]>maze[5][6],但是最后發(fā)現(xiàn)這樣只有在入口在左上角,出口在右下角時,才可以正確輸出。但是入口和出口是隨機的,若是入口在右下角,出口在左上角,則也同樣輸出maze[1][2]>maze[2][2]>maze[3][2]>maze[3][3]>maze[4][3]>maze[5][3]>maze[5][4]>maze[5][5]>maze[5][6],雖然這兩個路徑是一樣的,但是有先后順序,故最后沒有輸出這種形式,將這段代碼注釋了(源程序中有注釋的代碼);2、本來是想設(shè)計成既可以手動輸入迷宮又可以自動生成迷宮,但是感覺沒有太大的用處,所以最后省略了,只保留了手動輸入。3、在整個編寫的過程中,出現(xiàn)過很多錯誤,包括一些標點符號的小錯誤,但是借助DEBUG調(diào)試器和數(shù)據(jù)觀察窗口,很快找出來問題的所在。用戶手冊本程序的運行環(huán)境為DOS操作系統(tǒng),執(zhí)行文件為:迷宮求解.exe.進入演示程序后,即顯示文本方式的用戶界面:根據(jù)提示輸入迷宮大小及迷宮后,輸入迷宮的行和列,回車后即可得到所輸入迷宮的解或者是顯示“該迷宮找不到通路!”字樣。測試結(jié)果輸入長寬為5,6,入口為(1,2),出口為(5,6)的迷宮100111001111100011010111110000求解結(jié)果:輸入長寬為4,5,入口為(1,1),出口為(4,5)的迷宮01011001101011110000輸出結(jié)果為:輸入長寬為4,5,入口為(1,1),出口為(4,5)的迷宮110111010101100011010111110000輸出結(jié)果為:附錄源程序文件名清單:主函數(shù).cpp迷宮的實現(xiàn).h棧的實現(xiàn).h參考文獻1、嚴蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:清華大學出版社,2012.2、嚴蔚敏,吳偉民,米寧.數(shù)據(jù)結(jié)構(gòu)題集(C語言版)[M].北京:清華大學出版社,2012.3、蘇仕華,魏韋巍,王敬生,劉燕君.數(shù)據(jù)結(jié)構(gòu)課程設(shè)計[M].北京:機械工業(yè)出版社,2010.心得體會做了這次程序設(shè)計,我們發(fā)現(xiàn)利用數(shù)據(jù)結(jié)構(gòu)進行程序設(shè)計并不像想像中的那么高深,像我們現(xiàn)在所做的,只是一些最基本的程序。經(jīng)過一個學期的學習,對數(shù)據(jù)結(jié)構(gòu)有了一個初步的認識,但沒有進行實際應(yīng)用。這次程序設(shè)計,就相當于對一個學期的所學做一個總結(jié),再進行一次綜合運用,更是學到了很多新的東西,無意中也提升了自己的程序設(shè)計水平;在程序設(shè)計過程中碰到了很多問題,通過上網(wǎng)查資料等各種手段,我們的解決實際問題的能力也得到了提高。這次的程序設(shè)計,讓我們對程序設(shè)計有了一個更全面的認識,如果我們以后能在編程領(lǐng)域深入發(fā)展,這一次也算是我們邁出的重要一步吧。小組成員工作分配程序、文檔的編寫;程序校對及查找資料;文檔的勘誤及字體的調(diào)整。
本科生學位論文論多媒體技術(shù)在教學中的應(yīng)用姓名:指導教師:專業(yè):教育管理專業(yè)年級:完成時間:
論多媒體技術(shù)在教學中的應(yīng)用[摘要]多媒體不再是傳統(tǒng)的輔助教學工具,而是為構(gòu)造一種新的網(wǎng)絡(luò)教學環(huán)境創(chuàng)造了條件,特別是對于教育社會化來說,多媒體網(wǎng)絡(luò)是一種更理想的傳播工具。多媒體本身具有:融合性、非線性化,無結(jié)構(gòu)性、相互交涉性、可編輯性、實時性等特點;同時運用在教育教學上又有其特長:利于信息的存儲利用、是培養(yǎng)發(fā)散性思維的工具、促使學習個別化的實現(xiàn)。多媒體在教學中的應(yīng)用有著多種的形式,它在提高學生學習興趣上有著積極的作用,同時它還能促進學生知識的獲取與保持、對教學信息進行有效的組織與管理、建構(gòu)理想的學習環(huán)境,促進學生自主學習等多方面的效果。立足未來發(fā)展,利用多媒體網(wǎng)絡(luò)技術(shù),開展教學試驗。[關(guān)鍵詞]多媒體網(wǎng)絡(luò)教學系統(tǒng)資源共享多媒體技術(shù)主要指多媒體計算機技術(shù),加工、控制、編輯、變換,還可以查詢、檢索。人們借助于多媒體技術(shù)可以自然貼切地表達、傳播、處理各種視聽信息,并具有更多的參與性和創(chuàng)造性。當今多媒體已成為廣泛流傳的名詞,但人們對于它的認識,特別是對于它在教育教學方面如何更好應(yīng)用,未知的因素還很多。
一、多媒體的教育特長任何一種媒體不管其怎樣先進,它只能是作為一種工具被應(yīng)用到教育領(lǐng)域,能不能促進教育的改革,。。。。。。應(yīng)當吸取教訓,加強理論研究,充分認識多媒體的特性及其教育特長,以便更好地在教育領(lǐng)域開發(fā)應(yīng)用多媒體。
1、多媒體的特性
(1)融合性多種符號系統(tǒng)的融合是多媒體的特性之一,多媒體的這一特性區(qū)別于過去媒體符號系統(tǒng)的單一性或復合性。也就是說多媒體技術(shù)不是將符號系統(tǒng)疊加,而是具有整體性的融合。
(2)非線性化,無結(jié)構(gòu)性因為多媒體是在超文本、,其組合結(jié)構(gòu)是固定的、不變的。
(5)實時性多媒體信息中的聲音、活動視瀕、動畫于時間有密切聯(lián)系,對它們進行呈現(xiàn)、交互等集成處理是實時的。在顯示某一主體內(nèi)容時,其視聽信息具有同步性。
2、多媒體的教育特長
(1)信息的存儲利用便利多媒體特別是多媒體WWW網(wǎng)絡(luò)信息的存儲、提取、雙向傳輸非常便利,它應(yīng)用于教育,更利于教學信息傳播機制的建立。
(2)發(fā)散性思維的工具在培養(yǎng)學習者發(fā)散性思維方面…………或創(chuàng)造性思維的基礎(chǔ)。
(3)促使學習個別化的實現(xiàn)多媒體WWW網(wǎng)絡(luò)有利于個別化的實現(xiàn)。因為學習者各人需求、學習經(jīng)驗、認知程度等不同,學習方法也有差異,由于多媒體教學信息的多角度多層次性,不具有固定的學習
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)境保護行業(yè)污染物排放治理方案
- 2025年益陽c1貨運從業(yè)資格證考試題
- 2025年廊坊貨運上崗證考試題答案
- 小學二年級數(shù)學下冊口算題
- 小學二年級數(shù)學上冊口算練習試題
- 2025年東營貨運運輸駕駛員從業(yè)資格證考試試題
- 2024-2025版高中化學第4章非金屬及其化合物第3節(jié)第1課時硫和硫的氧化物練習含解析新人教版必修1
- 社區(qū)社會實踐活動總結(jié)
- 初中班主任下學期工作總結(jié)
- 醫(yī)務(wù)人員工作計劃
- 道德經(jīng)全文完整版本
- 濰坊市人民醫(yī)院招聘真題
- 銷售人員薪資提成及獎勵制度
- 2023年宏觀經(jīng)濟學考點難點
- 先兆流產(chǎn)課件-課件
- 黑龍江申論真題2021年(鄉(xiāng)鎮(zhèn))
- 山體排險合同模板
- 醫(yī)保專(兼)職管理人員的勞動合同(2篇)
- 特殊感染手術(shù)的配合與術(shù)后處理課件
- 檢驗科生物安全工作總結(jié)
- 《ESPEN重癥病人營養(yǎng)指南(2023版)》解讀課件
評論
0/150
提交評論