迷宮問(wèn)題課程設(shè)計(jì)報(bào)告書_第1頁(yè)
迷宮問(wèn)題課程設(shè)計(jì)報(bào)告書_第2頁(yè)
迷宮問(wèn)題課程設(shè)計(jì)報(bào)告書_第3頁(yè)
迷宮問(wèn)題課程設(shè)計(jì)報(bào)告書_第4頁(yè)
迷宮問(wèn)題課程設(shè)計(jì)報(bào)告書_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

.PAGE.目錄第一部分引言……………………第二部分課程設(shè)計(jì)報(bào)告…………第一節(jié)課程設(shè)計(jì)目的…………………第二節(jié)課程設(shè)計(jì)內(nèi)容和要求…………2.1問(wèn)題描述………………2.2設(shè)計(jì)要求………………課程設(shè)計(jì)總體方案及分析……3.1問(wèn)題分析………………3.2概要設(shè)計(jì)………………3.3詳細(xì)設(shè)計(jì)………………3.4測(cè)試結(jié)果……………3.5參考文獻(xiàn)………………第三部分課程設(shè)計(jì)總結(jié)…………附錄<源代碼>……………………第一部分引言數(shù)據(jù)結(jié)構(gòu)是一門理論性強(qiáng)、思維抽象、難度較大的課程,是基礎(chǔ)課和專業(yè)課之間的橋梁。該課程的先行課程是計(jì)算機(jī)基礎(chǔ)、程序設(shè)計(jì)語(yǔ)言、離散數(shù)學(xué)等,后續(xù)課程有操作系統(tǒng)、編譯原理、數(shù)據(jù)庫(kù)原理、軟件工程等。通過(guò)本門課程的學(xué)習(xí),我們應(yīng)該能透徹地理解各種數(shù)據(jù)對(duì)象的特點(diǎn),學(xué)會(huì)數(shù)據(jù)的組織方法和實(shí)現(xiàn)方法,并進(jìn)一步培養(yǎng)良好的程序設(shè)計(jì)能力和解決實(shí)際問(wèn)題的能力,而且該課程的研究方法對(duì)我們學(xué)生在校和離校后的學(xué)習(xí)和工作,也有著重要的意義。數(shù)據(jù)結(jié)構(gòu)是軟件工程專業(yè)的一門核心專業(yè)基礎(chǔ)課程,在該專業(yè)的課程體系中起著承上啟下的作用,學(xué)好數(shù)據(jù)結(jié)構(gòu)對(duì)于提高理論認(rèn)知水平和實(shí)踐能力有著極為重要的作用。學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的最終目的是為了獲得求解問(wèn)題的能力。對(duì)于現(xiàn)實(shí)世界中的問(wèn)題,應(yīng)該能從中抽象出一個(gè)適當(dāng)?shù)臄?shù)學(xué)模型,該數(shù)學(xué)模型在計(jì)算機(jī)內(nèi)部用相應(yīng)的數(shù)據(jù)結(jié)構(gòu)來(lái)表示,然后設(shè)計(jì)一個(gè)解此數(shù)學(xué)模型的算法,再進(jìn)行編程調(diào)試,最后獲得問(wèn)題的解答。基于此原因,暑期我們開設(shè)了數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)。針對(duì)數(shù)據(jù)結(jié)構(gòu)課程的特點(diǎn),著眼于培養(yǎng)我們的實(shí)踐能力。實(shí)習(xí)課程是為了加強(qiáng)編程能力的培養(yǎng),鼓勵(lì)學(xué)生使用新興的編程語(yǔ)言。相信通過(guò)數(shù)據(jù)結(jié)構(gòu)課程實(shí)踐,無(wú)論是理論知識(shí),還是實(shí)踐動(dòng)手能力,同學(xué)們都會(huì)有不同程度上的提高。第二部分課程設(shè)計(jì)報(bào)告第一節(jié)課程設(shè)計(jì)目的僅僅認(rèn)識(shí)到棧和隊(duì)列是一種特殊的線性表是遠(yuǎn)遠(yuǎn)不夠的,本次實(shí)習(xí)的目的在于使學(xué)生深入了解棧和隊(duì)列的特征,以便在實(shí)際問(wèn)題背景下靈活運(yùn)用它,同時(shí)還將鞏固這種數(shù)據(jù)結(jié)構(gòu)的構(gòu)造方法。第二節(jié)課程設(shè)計(jì)內(nèi)容和要求2.1問(wèn)題描述:迷宮問(wèn)題是取自心理學(xué)的一個(gè)古典實(shí)驗(yàn)。在該實(shí)驗(yàn)中,把一只老鼠從一個(gè)無(wú)頂大盒子的門放入,在盒子中設(shè)置了許多墻,對(duì)行進(jìn)方向形成了多處阻擋。盒子僅有一個(gè)出口,在出口處放置一塊奶酪,吸引老鼠在迷宮中尋找道路以到達(dá)出口。對(duì)同一只老鼠重復(fù)進(jìn)行上述實(shí)驗(yàn),一直到老鼠從入口走到出口,而不走錯(cuò)一步。老鼠經(jīng)過(guò)多次試驗(yàn)最終學(xué)會(huì)走通迷宮的路線。設(shè)計(jì)一個(gè)計(jì)算機(jī)程序?qū)θ我庠O(shè)定的矩形迷宮,求出一條從入口到出口的通路,或得出沒(méi)有通路的結(jié)果。2.2設(shè)計(jì)要求:要求設(shè)計(jì)程序輸出如下:<1>建立一個(gè)大小為m×m的任意迷宮〔迷宮數(shù)據(jù)可由用戶輸入或由程序自動(dòng)生成,并在屏幕上顯示出來(lái);〔2在屏幕上輸出迷宮和通路;第三節(jié)課程設(shè)計(jì)總體方案及分析3.1問(wèn)題分析:1.迷宮的建立:迷宮中存在通路和障礙,為了方便迷宮的創(chuàng)建,可用0表示通路,用1表示障礙,#表示墻壁,這樣迷宮就可以用0、1矩陣來(lái)描述,2.迷宮的存儲(chǔ):迷宮是一個(gè)矩形區(qū)域,可以使用二維數(shù)組表示迷宮,這樣迷宮的每一個(gè)位置都可以用其行列號(hào)來(lái)唯一指定,但是二維數(shù)組不能動(dòng)態(tài)定義其大小,我們可以考慮先定義一個(gè)較大的二維數(shù)組maze[M+2][M+2],然后用它的前m行m列來(lái)存放元素,即可得到一個(gè)m×m的二維數(shù)組,這樣<0,0>表示迷宮入口位置,<m-1,m-1>表示迷宮出口位置。注:其中M,M分別表示迷宮最大行、列數(shù),本程序M的最大值為9,當(dāng)然用戶也可根據(jù)需要,調(diào)整其大小。3.迷宮路徑的搜索:首先從迷宮的入口開始,如果該位置就是迷宮出口,則已經(jīng)找到了一條路徑,搜索工作結(jié)束。否則搜索其上、下、左、右位置是否是障礙,若不是障礙,就移動(dòng)到該位置,然后再?gòu)脑撐恢瞄_始搜索通往出口的路徑;若是障礙就選擇另一個(gè)相鄰的位置,并從它開始搜索路徑。為防止搜索重復(fù)出現(xiàn),則將已搜索過(guò)的位置用函數(shù)進(jìn)行判斷和標(biāo)記,同時(shí)保留搜索痕跡,在考慮進(jìn)入下一個(gè)位置搜索之前,將當(dāng)前位置保存在一個(gè)隊(duì)列中,如果所有相鄰的非障礙位置均被搜索過(guò),且未找到通往出口的路徑,則表明不存在從入口到出口的路徑。這實(shí)現(xiàn)的是廣度優(yōu)先遍歷的算法,如果找到路徑,則最短路徑。搜索算法流程圖如下所示:3.2概要設(shè)計(jì)①構(gòu)建一個(gè)二維數(shù)組maze[M+2][M+2]用于存儲(chǔ)迷宮矩陣②自動(dòng)或手動(dòng)生成迷宮,即為二維數(shù)組maze[M+2][M+2]賦值③構(gòu)建一個(gè)隊(duì)列用于存儲(chǔ)迷宮路徑④建立迷宮節(jié)點(diǎn),用于存儲(chǔ)迷宮中每個(gè)節(jié)點(diǎn)的訪問(wèn)情況⑤實(shí)現(xiàn)搜索算法⑥屏幕上顯示操作菜單2.本程序包含12個(gè)函數(shù):<1>主函數(shù)main<>StatusInitStack<SqStack&S>;//創(chuàng)建一個(gè)空棧S<3>StatusPush<SqStack&S,SElemType&a>;//插入新元素a<4>StatusPop<SqStack&S,SElemType&a>;//刪除棧頂元素,a返回其值<5>StatusStackEmpty<SqStackS>;//檢查是否空棧<6>StatusMazePath<intmaze[12][12],SqStack&S,PosTypestart,PosTypeend>;//找通路<7>voidInitmaze<intmaze[12][12],intsize>;//初始化迷宮<8>voidprintmaze<intmaze[12][12],intsize>;//顯示迷宮<9>StatusPass<intmaze[12][12],PosTypeCurPos>;//判斷當(dāng)前位置是否可通<10>voidMarkfoot<intmaze[12][12],PosTypeCurPos>;//標(biāo)記當(dāng)前位置不可通<11>PosTypeNextPos<PosTypeCurPos,intDir>;//進(jìn)入下一位置<12>voidprintpath<intmaze[12][12],SqStackS,intsize>;//顯示通路3.3詳細(xì)設(shè)計(jì)程序設(shè)計(jì)的基本思想,原理和算法描述:此算法最大的優(yōu)點(diǎn)是支持圖形化輸入與輸出,觀察效果好迷宮求解問(wèn)題主要運(yùn)用了堆棧的性質(zhì)求迷宮中一條從入口到出口的路徑的算法描述:do{若當(dāng)前位置可通則{將當(dāng)前位置插入棧頂;若該位置時(shí)出口位置,則結(jié)束;否則切換當(dāng)前位置為東鄰方塊為新的當(dāng)前位置;}否則{若棧不空且棧頂位置尚有其他方向未經(jīng)探索,則設(shè)定新的當(dāng)前位置為沿順時(shí)針?lè)较蛐D(zhuǎn)的棧頂位置的下一相鄰模塊若棧不空但棧頂位置的四周均不可通則{刪去棧頂位置;若棧不空,則重新測(cè)試新的棧頂位置直至找到一個(gè)可通的相鄰模塊或出棧至???;}}}while<棧不空>實(shí)現(xiàn)的函數(shù)為/**************************************************************若迷宮maze中從入口start到出口end的通道,則求得一條存放在棧中**************************************************************/StatusMazePath<intmaze[12][12],SqStack&S,PosTypestart,PosTypeend>{PosTypecurpos;intcurstep;SElemTypee;InitStack<S>;curpos=start;//設(shè)定"當(dāng)前位置"為"入口位置curstep=1;//探索第一步do{if<Pass<maze,curpos>>//當(dāng)前位置可通過(guò),即是未曾走到過(guò)的通道塊{Markfoot<maze,curpos>;//留下足跡e.di=1;e.ord=curstep;e.seat=curpos;Push<S,e>;//加入路徑if<curpos.row==end.row&&curpos.line==end.line>returnOK;//到達(dá)終點(diǎn)〔出口curpos=NextPos<curpos,1>;//下一位置是當(dāng)前位置的東鄰curstep++;//探索下一步}else//當(dāng)前位置不能通過(guò){if<!StackEmpty<S>>{Pop<S,e>;while<e.di==4&&!StackEmpty<S>>{Markfoot<maze,e.seat>;//留下不能通過(guò)的標(biāo)記,并退回一步Pop<S,e>;}if<e.di<4>{e.di++;//換下一個(gè)方向探索Push<S,e>;curpos=NextPos<e.seat,e.di>;//當(dāng)前位置設(shè)為新方向的//相鄰塊}}}}while<!StackEmpty<S>>;returnERROR;}圍繞這個(gè)函數(shù)需要定義一些相關(guān)的函數(shù)操作,由以下函數(shù)實(shí)現(xiàn)/**************************************************************函數(shù)原型說(shuō)明**************************************************************/StatusInitStack<SqStack&S>;//創(chuàng)建一個(gè)空棧SStatusPush<SqStack&S,SElemType&a>;//插入新元素aStatusPop<SqStack&S,SElemType&a>;//刪除棧頂元素,a返回其值StatusStackEmpty<SqStackS>;//檢查是否空棧StatusMazePath<intmaze[12][12],SqStack&S,PosTypestart,PosTypeend>;//找通路voidInitmaze<intmaze[12][12],intsize>;//初始化迷宮voidprintmaze<intmaze[12][12],intsize>;//顯示迷宮StatusPass<intmaze[12][12],PosTypeCurPos>;//判斷當(dāng)前位置是否可通voidMarkfoot<intmaze[12][12],PosTypeCurPos>;//標(biāo)記當(dāng)前位置不可通PosTypeNextPos<PosTypeCurPos,intDir>;//進(jìn)入下一位置voidprintpath<intmaze[12][12],SqStackS,intsize>;//顯示通路算法中我用正方形迷宮,即行數(shù)等于列數(shù)。迷宮的存儲(chǔ)我用了一個(gè)整形二維數(shù)組表示,intsize;//正方形迷宮尺寸intmaze[12][12];//存儲(chǔ)迷宮內(nèi)路徑可通情況二維數(shù)組存儲(chǔ)的數(shù)字表示對(duì)應(yīng)迷宮位置處可通與否,0表示可通,1表示不可通。尺寸大小size可以設(shè)置,但是不能超過(guò)10,因?yàn)槎S數(shù)組第一行,最后一行,第一列,最后一列一定要是不可通的,這是算法中用到的一個(gè)技巧。迷宮內(nèi)通道塊位置變量類型定義為PosTypetypedefstruct{introw;//row表示"行"號(hào)intline;//line表示"列"號(hào)}PosType;//位置的元素類型這樣判斷其可通與否的語(yǔ)句為if<maze[CurPos.row][CurPos.line]==0>1.迷宮的初始化voidInitmaze<intmaze[12][12],intsize>;//初始化迷宮迷宮的初始化有兩種方法,一是隨即生成,一是手動(dòng)設(shè)置,由用戶選擇。隨即生成的方法是程序生成隨機(jī)數(shù),除以2取余maze[i][j]=rand<>%2;手動(dòng)設(shè)置是用戶輸入0,1由程序讀取scanf<"%d",&maze[i][j]>;見部分程序2.顯示迷宮voidprintmaze<intmaze[12][12],intsize>;//顯示迷宮只需要整齊打印出0,1即可,可以看到很好的效果顯示初始化的迷宮程序見第三部分。3.顯示通路voidprintpath<intmaze[12][12],SqStackS,intsize>;//顯示通路用到了一個(gè)技巧,只要是納入堆棧的位置元素即為通路上的路徑,將其迷宮對(duì)應(yīng)位置值變?yōu)?,while<p!=S.top>{maze[p->seat.row][p->seat.line]=2;//標(biāo)記為路徑中的點(diǎn)p++;}然后顯示通路時(shí)只要等于2的地方就打印一個(gè)0,否則打印空格。if<maze[i][j]==2>printf<"%c",'0'>;elseprintf<"">;4.進(jìn)入下一位置PosTypeNextPos<PosTypeCurPos,intDir>;//進(jìn)入下一位置時(shí)按順時(shí)針?lè)较?/向下一位置探索5.堆棧操作,包括創(chuàng)建,入棧,出棧,判空。StatusInitStack<SqStack&S>;//創(chuàng)建一個(gè)空棧SStatusPush<SqStack&S,SElemType&a>;//插入新元素aStatusPop<SqStack&S,SElemType&a>;//刪除棧頂元素,a返回其值StatusStackEmpty<SqStackS>;//檢查是否空棧3.3測(cè)試結(jié)果BuildLogConfiguration:迷宮求解-Win32DebugCommandLinesResults迷宮求解.exe-0error<s>,0warning<s>錯(cuò)誤輸入正確路徑3.5參考文獻(xiàn)1.譚浩強(qiáng)<<C程序設(shè)計(jì)>>[M].北京:清華大學(xué)出版社,2006.2.嚴(yán)蔚敏<<數(shù)據(jù)結(jié)構(gòu)〔C語(yǔ)言版>>[M].北京:清華大學(xué)出版社3.王華,葉愛亮等.<<VisualC++6.0編程實(shí)例與技巧>>[M].北京:機(jī)械工業(yè)出版社4.錢新賢,程兆煒等.<<VisualC++編程疑難詳解>>[M].北京:人民郵電出版社,2000.第三部分課程設(shè)計(jì)總結(jié)通過(guò)這段時(shí)間的課程設(shè)計(jì),本人對(duì)軟件專業(yè)的應(yīng)用,數(shù)據(jù)結(jié)構(gòu)的作用以及C語(yǔ)言的使用都有了更深的了解。尤其是C語(yǔ)言的進(jìn)步讓我深刻的感受到任何所學(xué)的知識(shí)都需要實(shí)踐,沒(méi)有實(shí)踐就無(wú)法真正理解這些知識(shí)以及掌握它們,使其成為自己的財(cái)富。在理論學(xué)習(xí)和上機(jī)實(shí)踐的各個(gè)環(huán)節(jié)中,通過(guò)自主學(xué)習(xí)和請(qǐng)教老師,我收獲了不少。當(dāng)然也遇到不少的問(wèn)題,也正是因?yàn)檫@些問(wèn)題引發(fā)的思考給我?guī)Я耸斋@。從當(dāng)初不喜歡上機(jī)寫程序到現(xiàn)在能主動(dòng)寫程序,從當(dāng)初拿著程序不只如何下手到現(xiàn)在知道如何分析問(wèn)題,如何用專業(yè)知識(shí)解決實(shí)際問(wèn)題的轉(zhuǎn)變,我發(fā)現(xiàn)無(wú)論是專業(yè)知識(shí)還是動(dòng)手能力,自己都有很大程度的提高。在這段時(shí)間里,我對(duì)forwhile等的循環(huán)函數(shù)用法更加熟悉,逐漸形成了較好的編程習(xí)慣。在老師的指導(dǎo)幫助下,同學(xué)們課余時(shí)間的討論中,這些問(wèn)題都一一得到了解決。在程序的調(diào)試能力上,無(wú)形中得到了許多的提高。例如:頭文件的使用,變量和數(shù)組的范圍問(wèn)題,定義變量時(shí)出現(xiàn)的問(wèn)題等等。在實(shí)際的上機(jī)操作過(guò)程中,不僅是讓我們了解數(shù)據(jù)結(jié)構(gòu)的理論知識(shí),更重要的是培養(yǎng)解決實(shí)際問(wèn)題的能力,所以相信通過(guò)此次實(shí)習(xí)可以提高我們分析設(shè)計(jì)能力和編程能力,為后續(xù)課程的學(xué)習(xí)及實(shí)踐打下良好的基礎(chǔ)。在這次短短的課程實(shí)踐里,我們得到了鄧彬老師的關(guān)心和幫助。她給了我們很多的信息,與我們一起探討問(wèn)題,詢問(wèn)我們遇到了哪些問(wèn)題并耐心給予指導(dǎo)。當(dāng)我們遇到技術(shù)上難以解決的問(wèn)題時(shí),她就會(huì)指導(dǎo)我們解決問(wèn)題,她把自己多年來(lái)積累的經(jīng)驗(yàn)教給我們,使我們順利地完成了課程實(shí)踐任務(wù)。時(shí)間過(guò)得真快,大學(xué)生活不知不覺(jué)就走過(guò)了一年,一年的大學(xué)學(xué)習(xí)和課程實(shí)踐階段的提高,使我們本身知識(shí)得到提高的同時(shí),也增強(qiáng)了我們對(duì)未來(lái)工作的信心,我們相信自己未來(lái)三年的學(xué)習(xí)更使我們有能力勝任將來(lái)的工作。附錄:〔原程序代碼#include<stdio.h>#include<stdlib.h>/**************************************************************數(shù)據(jù)定義**************************************************************/typedefenum{ERROR,OK}Status;typedefstruct{introw;//row表示"行"號(hào)intline;//line表示"列"號(hào)}PosType;//位置的元素類型typedefstruct{intord;//該通道在路徑上的"序號(hào)"PosTypeseat;//通道塊在迷宮中的"坐標(biāo)位置"intdi;//從此通道走向下以通道塊的"方向"}SElemType;//棧的元素類型typedefstruct{SElemType*base;SElemType*top;intstacksize;}SqStack;/**************************************************************函數(shù)原型說(shuō)明**************************************************************/StatusInitStack<SqStack&S>;//創(chuàng)建一個(gè)空棧SStatusPush<SqStack&S,SElemType&a>;//插入新元素aStatusPop<SqStack&S,SElemType&a>;//刪除棧頂元素,a返回其值StatusStackEmpty<SqStackS>;//檢查是否空棧StatusMazePath<intmaze[12][12],SqStack&S,PosTypestart,PosTypeend>;//找通路voidInitmaze<intmaze[12][12],intsize>;//初始化迷宮voidprintmaze<intmaze[12][12],intsize>;//顯示迷宮StatusPass<intmaze[12][12],PosTypeCurPos>;//判斷當(dāng)前位置是否可通voidMarkfoot<intmaze[12][12],PosTypeCurPos>;//標(biāo)記當(dāng)前位置不可通PosTypeNextPos<PosTypeCurPos,intDir>;//進(jìn)入下一位置voidprintpath<intmaze[12][12],SqStackS,intsize>;//顯示通路/**************************************************************主函數(shù)**************************************************************/voidmain<void>{SqStackS;intsize;//正方形迷宮尺寸intmaze[12][12];//存儲(chǔ)迷宮內(nèi)路徑可通情況for<intn=0;n<10;n++>{printf<"創(chuàng)建一個(gè)正方形迷宮,請(qǐng)輸入迷宮尺寸<注意不要大于10>:\n">;//設(shè)置迷宮大小scanf<"%d",&size>;if<size<1||size>10>{printf<"輸入錯(cuò)誤!">;return;}Initmaze<maze,size>;//初始化迷宮printmaze<maze,size>;//顯示所創(chuàng)建的迷宮PosTypestart,end;//設(shè)置入口和出口printf<"輸入入口行坐標(biāo)和列坐標(biāo):">;scanf<"%d",&start.row>;scanf<"%d",&start.line>;printf<"輸入出口行坐標(biāo)和列坐標(biāo):">;scanf<"%d",&end.row>;scanf<"%d",&end.line>;if<MazePath<maze,S,start,end>>//若有通路,顯示通路printpath<maze,S,size>;elseprintf<"找不到通路!\n\n">;}}/**************************************************************若迷宮maze中從入口start到出口end的通道,則求得一條存放在棧中**************************************************************/StatusMazePath<intmaze[12][12],SqStack&S,PosTypestart,PosTypeend>{PosTypecurpos;intcurstep;SElemTypee;InitStack<S>;curpos=start;//設(shè)定"當(dāng)前位置"為"入口位置curstep=1;//探索第一步do{if<Pass<maze,curpos>>//當(dāng)前位置可通過(guò),即是未曾走到過(guò)的通道塊{Markfoot<maze,curpos>;//留下足跡e.di=1;e.ord=curstep;e.seat=curpos;Push<S,e>;//加入路徑if<curpos.row==end.row&&curpos.line==end.line>returnOK;//到達(dá)終點(diǎn)〔出口curpos=NextPos<curpos,1>;//下一位置是當(dāng)前位置的東curstep++;//探索下一步}else//當(dāng)前位置不能通過(guò){if<!StackEmpty<S>>{Pop<S,e>;while<e.di==4&&!StackEmpty<S>>{Markfoot<maze,e.seat>;//留下不能通過(guò)的標(biāo)記,并退回一步Pop<S,e>;}if<e.di<4>{e.di++;//換下一個(gè)方向探索Push<S,e>;curpos=NextPos<e.seat,e.di>;//當(dāng)前位置設(shè)為新方向的相鄰塊}}}}while<!StackEmpty<S>>;returnERROR;}/**************************************************************初始化迷宮**************************************************************/voidInitmaze<intmaze[12][12],intsize>{charselect;printf<"選擇創(chuàng)建方式A:自動(dòng)生成B:手動(dòng)創(chuàng)建\n">;label:scanf<"%c",&select>;if<select=='a'||select=='A'>//自動(dòng)生成{for<inti=0;i<size+2;i++>maze[0][i]=1;for<i=1;i<size+1;i++>{maze[i][0]=1;for<intj=1;j<size+1;j++>maze[i][j]=rand<>%2;maze[i][size+1]=1;}for<i=0;i<size+2;i++>maze[size+1][i]=1;}elseif<select=='b'||select=='B'>//手動(dòng)設(shè)置{printf<"按行輸入%d*%d數(shù)據(jù),0代表可通,1代表不可通<每行以Enter結(jié)束>:\n",size,size>;for<inti=0;i<size+2;i++>maze[0][i]=1;for<i=1;i<size+1;i++>{maze[i][0]=1;for<intj=1;j<size+1;j++>scanf<"%d",&maze[i][j]>;maze[i][size+1]=1;}for<i=0;i<size+2;i++>maze[size+1][i]=1;}elseif<select=='\n'>gotolabel;//排除Enter鍵的影響elseprintf<"輸入錯(cuò)誤!">;}/**************************************************************顯示迷宮**************************************************************/voidprintmaze<intmaze[12][12],intsize>{printf<"\n\n">;printf<"顯示所建的迷宮<#表示外面的墻>:\n">;for<inti=0;i<size+2;i++>printf<"%c",'#'>;printf<"\n">;for<i=1;i<size+1;i++>{printf<"%c",'#'>;for<intj=1;j<size+1;j++{printf<"%d",maze[i][j]>;}printf<"%c",'#'>;printf<"\n">;}for<i=0;i<size+2;i++>printf<"%c",'#'>;printf<"\n">;}/**************************************************************輸出路徑**************************************************************/voidprintpath<intmaze[12][12],SqStackS,intsize>{printf<"\n\n通路路徑為:\n">;SElemType*p=S.base;while<p!=S.top>{maze[p->seat.row][p->seat.line]=2;//標(biāo)記為路徑中的點(diǎn)p++;}for<inti=0;i<size+2;i++>printf<"%c",'#'>;printf<"\n">;for<i=1;i<size+1;i++>{printf<"%c",'#'>;for<intj=1;j<size+1;j++>{if<maze[i][j]==2>printf<"%c",'0'>;elseprintf<"">;}printf<"%c",'#'>;printf<"\n">;}for<i=0;i<size+2;i++>printf<"%c",'#'>;printf<"\n\n">;}/**************************************************************判斷當(dāng)前位置是否可通**************************************************************/StatusPass<intmaze[12][12],PosTypeCurPos>{if<maze[CurPos.row][CurPos.line]==0>returnOK;//如果當(dāng)前位置是可以通過(guò),返回1elsereturnERROR;//其它情況返回0}/**************************************************************標(biāo)記當(dāng)前位置不可通**************************************************************/voidMarkfoot<intmaze[12][12],PosTypeCurPos>{maze[CurPos.row][CurPos.line]=1;}/**************************************************************進(jìn)入下一位置**************************************************************/PosTypeNextPos<PosTypeCurPos,

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論