版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
(說(shuō)明:實(shí)驗(yàn)報(bào)告必須包含下面的每項(xiàng)內(nèi)容,根據(jù)實(shí)驗(yàn)情況認(rèn)真填寫(xiě),封面必須打印或復(fù)?。ˋ4紙),書(shū)寫(xiě)上機(jī)實(shí)驗(yàn)報(bào)告內(nèi)容的紙張也用A4紙,最后從側(cè)面裝訂)一【上機(jī)實(shí)驗(yàn)?zāi)康摹苛私鈼5膽?yīng)用編寫(xiě)迷宮程序二【實(shí)驗(yàn)環(huán)境】PC機(jī)每人1臺(tái)三【上機(jī)實(shí)驗(yàn)內(nèi)容】(此次上機(jī)實(shí)驗(yàn)老師布置的具體任務(wù))迷宮求解主要利用棧實(shí)現(xiàn),要求能動(dòng)態(tài)生成迷宮,顯示有幾條路徑,用圖形界面顯示最合適的路徑。四【上機(jī)調(diào)試程序流程圖】(注:可打?。ㄓ脗鹘y(tǒng)流程圖的形式表示)五【上機(jī)調(diào)試中出現(xiàn)的錯(cuò)誤信息、錯(cuò)誤原因及解決辦法】(記錄下你調(diào)試程序中出現(xiàn)的錯(cuò)誤信息的英文提示,分析出錯(cuò)原因及可能的解決辦法)馬虎造成的錯(cuò)誤程序的邏輯有問(wèn)題語(yǔ)法用錯(cuò)調(diào)試過(guò)程中,將整個(gè)程序分為一個(gè)個(gè)子塊,逐個(gè)解決六【上機(jī)調(diào)試后的源程序及還存在的問(wèn)題】(注:源程序可打?。ㄍ瑫r(shí)記錄下你對(duì)你編寫(xiě)此程序的其它具體想法,)#include<stdlib.h>#include<time.h>#include<stack>#include<queue>usingnamespacestd;#defineOVERFLOW0#defineOK1#defineERROE0#defineTRUE1#defineFALSE0#defineSIZE102//迷宮的最大范圍typedefintStatus;typedefstruct{ intx; inty;}PosType;//坐標(biāo)位置typedefstruct{ PosTypeseat;//通道塊在迷宮中的"坐標(biāo)位置" intdi;//從上一通道塊走向此通道塊的"方向"}SElemType;StatusCheck(char&choice);//確認(rèn)輸入正確voidRandom(intmg[SIZE][SIZE],intsize,PosTypestart,PosTypeend){ inti,j,k; srand(time(NULL)); for(j=0;j<size;j++) mg[0][j]=mg[size-1][j]=1;//設(shè)置迷宮外圍"不可走",保證只有一個(gè)出口和入口 for(i=1;i<size-1;i++) mg[i][0]=mg[i][size-1]=1; for(i=1;i<size-1;i++) for(j=1;j<size-1;j++){ k=rand()%4;//隨機(jī)生成0、1、2、3四個(gè)數(shù) if(k) mg[i][j]=0; else{ mg[i][j]=1; }//else } mg[start.y][start.x]=0; mg[end.y][end.x]=0;//將入口、出口設(shè)置為"0"即可通過(guò)}StatusPass(PosTypee,intmg[SIZE][SIZE]){ if(mg[e.y][e.x]==0)//0時(shí)可以通過(guò) returnOK;//如果當(dāng)前位置是可以通過(guò),返回1 returnOVERFLOW;//其它情況返回0}StatusFootPrint(PosTypee,intmg[SIZE][SIZE]){ mg[e.y][e.x]=7; returnOK;}PosTypeNextPos(PosTypee,intdir){ PosTypeE; switch(dir){ case1:E.x=e.x+1;//向右 E.y=e.y; break; case2:E.x=e.x;//向下 E.y=e.y+1; break; case3:E.x=e.x-1;//向左 E.y=e.y; break; case4:E.x=e.x;//向上 E.y=e.y-1; break; } returnE;}StatusEqual(PosTypee1,PosTypee2){ if((e1.x==e2.x)&&(e1.y==e2.y)) returnTRUE; returnFALSE;}StatusMarkPath(PosTypee,intmg[SIZE][SIZE],intdi){ switch(di) {case1://向右 mg[e.y][e.x]=11; break; case2://向下 mg[e.y][e.x]=12; break; case3://向左 mg[e.y][e.x]=13; break; case4://向上 mg[e.y][e.x]=14; break; } returnOK;}PosTypeFrontPos(PosTypee,intdir){ PosTypeE; switch(dir){ case1:E.x=e.x-1;//向左 E.y=e.y; break; case2:E.x=e.x;//向上 E.y=e.y-1; break; case3:E.x=e.x+1;//向右 E.y=e.y; break; case4:E.x=e.x;//向下 E.y=e.y+1; break; } returnE;}StatusPathPrint(stack<SElemType>s,intmg[SIZE][SIZE]){ SElemTypee,front,tail; intdi; e=s.top(); tail=e; s.pop(); MarkPath(e.seat,mg,1); while(!s.empty()) { front=s.top(); s.pop(); if(Equal(front.seat,FrontPos(e.seat,e.di))) { di=e.di; e=front; MarkPath(e.seat,mg,di); } } returnOK;}StatusPathClean(intmg[SIZE][SIZE],stack<SElemType>s){ SElemTypee; while(!s.empty()) { e=s.top(); s.pop(); mg[e.seat.y][e.seat.x]=0; } returnOK;}StatusMazePath(PosTypestart,PosTypeend,intmg[SIZE][SIZE],stack<SElemType>&s){ queue<SElemType>q; SElemTypee; intdi=0; e.di=di; e.seat=start;//設(shè)定"當(dāng)前位置"為"入口位置" q.push(e); s.push(e); do { e=q.front();//得到隊(duì)首的值 q.pop();///重復(fù)使用時(shí),用這個(gè)初始化 for(di=1;di<=4;di++) { e.seat=NextPos(e.seat,di); e.di=di; if(Pass(e.seat,mg)) { q.push(e); s.push(e); FootPrint(e.seat,mg); if(Equal(e.seat,end)) { PathPrint(s,mg); returnTRUE; } } e.seat=FrontPos(e.seat,di); } }while(!q.empty()); printf("\n\n囧!不能到達(dá)終點(diǎn)!"); returnFALSE;}voidPrintMaze(intmg[SIZE][SIZE],intsize){ inti,j; printf("\n"); for(i=0;i<size;i++) { for(j=0;j<size;j++) { switch(mg[i][j]) { case0: case7: printf(""); break; case1: if((1==i&&0==j)||((size-2)==i&&(size-1)==j)) printf(""); else printf("■"); break; case11: printf("→"); break; case12: printf("↓"); break; case13: printf("←"); break; case14: printf("↑"); break; } } printf("\n"); } printf("\n");}StatusCheck(char&choice){ while(!(((choice=getchar())=='y')||(choice=='n')||(choice=='Y')||(choice=='N')))//非正確輸入 { if(choice!='\n') { printf("請(qǐng)輸入確定選擇(y/n)\n"); getchar(); } } getchar();//跳過(guò)'\n' returnOK;}intmain(){ stack<SElemType>s; intmg[SIZE][SIZE]={1},size; PosTypestart,end; charchoice; system("modeconcols=200lines=200"); printf("\n==================迷宮最短路徑游戲=================="); printf("\n說(shuō)明:■不能走的區(qū)域"); printf("\n'空格'代表可通過(guò)的區(qū)域"); printf("\n默認(rèn)起點(diǎn)為左上角位置,默認(rèn)終點(diǎn)為右下角位置\n"); printf("\n============================================\n"); printf("請(qǐng)輸入迷宮邊長(zhǎng)(3~%d),系統(tǒng)將為你產(chǎn)生一個(gè)隨機(jī)迷宮:",SIZE-2); scanf("%d",&size); while((size>SIZE-2)||(size<1)) { printf("輸入有誤!\n"); printf("請(qǐng)輸入迷宮邊長(zhǎng)(3~%d),系統(tǒng)將為你產(chǎn)生一個(gè)隨機(jī)迷宮:",SIZE-2);scanf("%d",&size); } size+=2;//補(bǔ)上外圍 getchar();//跳過(guò)'\n' start.x=1;start.y=1;//起點(diǎn)坐標(biāo) end.x=size-2;end.y=size-2;//終點(diǎn)坐標(biāo) Random(mg,size,start,end);PrintMaze(mg,size); while(!((choice=='Q')||(choice=='q'))) { printf("是否使用該迷宮?(y/n)\n"); Check(choice); if((choice=='Y')||(choice=='y')) { PathClean(mg,s); } while((choice=='n')||(choice=='N')) { while(!s.empty()) s.pop(); choice=''; printf("請(qǐng)輸入迷宮邊長(zhǎng)(3~%d),系統(tǒng)將為你產(chǎn)生一個(gè)隨機(jī)迷宮:",SIZE-2); scanf("%d",&size); while((size>SIZE-2)||(size<1)) { printf("輸入有誤!\n"); printf("請(qǐng)輸入迷宮邊長(zhǎng)(3~%d),系統(tǒng)將為你產(chǎn)生一個(gè)隨機(jī)迷宮:",SIZE-2); scanf("%d",&size); } size+=2;//補(bǔ)上外圍 start.x=1;start.y=1;//起點(diǎn)坐標(biāo) end.x=size-2;end.y=size-2;//終點(diǎn)坐標(biāo) getchar();//跳過(guò)'\n' Random(mg,size,start,end); PrintMaze(mg,size); printf("是否使用該迷宮?(y/n)\n"); Check(choice); } printf("是否人工選擇起點(diǎn)和終點(diǎn)(y/n)?【默認(rèn):起點(diǎn)(1,1),終點(diǎn)(%d,%d)】\n",size-2,size-2); Check(choice); if((choice=='y')||(choice=='Y')) { printf("請(qǐng)輸入“起點(diǎn)”坐標(biāo)(1~%d)用空格分隔:",size-2); scanf("%d%d",&start.x,&start.y); while(((start.x>size-2)||start.x<1)||((start.y>size-2)||(start.y<1))||!Pass(start,mg)) { if(!Pass(start,mg)) printf("些位置不能為“起點(diǎn)”!\n"); elseprintf("輸入有誤!\n"); printf("請(qǐng)輸入“起點(diǎn)”坐標(biāo)(1~%d)用空格分隔:",size-2); scanf("%d%d",&start.x,&start.y); } printf("請(qǐng)輸入“終點(diǎn)”坐標(biāo)(1~%d)用空格分隔:",size-2); scanf("%d%d",&end.x,&end.y); while(((end.x>size-2)||end.x<1)||((end.y>size-2)||(end.y<1))||!Pass(end,mg)||Equal(start,end)) { if(!Pass(end,mg)) printf("些位置不能為“終點(diǎn)”!\n"); elseif(Equal(start,end))printf("該位置已為起點(diǎn)!\n"); elseprintf("輸入有誤!\n"); printf("請(qǐng)輸入“終點(diǎn)”坐標(biāo)(1~%d)用空格分隔:",size-2); scanf("%d%d",&end.x,&
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 鐵藝裝修合同范本
- 公對(duì)公培訓(xùn)協(xié)議書(shū)
- 開(kāi)發(fā)旅游合同范本
- 出售家電合同范本
- 車(chē)輛供銷(xiāo)合同范本
- 公益崗解除協(xié)議書(shū)
- 公積金注冊(cè)協(xié)議書(shū)
- 公證的析產(chǎn)協(xié)議書(shū)
- 公路護(hù)欄合同范本
- 公車(chē)租賃合同協(xié)議
- 壓裝法教學(xué)講解課件
- 囊袋皺縮綜合征課件
- 預(yù)防坍塌專(zhuān)項(xiàng)方案(人工挖孔樁)
- 2023版北京協(xié)和醫(yī)院重癥醫(yī)學(xué)科診療常規(guī)
- 2022年河北省普通高等學(xué)校對(duì)口招生考試機(jī)械類(lèi)試題
- 團(tuán)課學(xué)習(xí)筆記
- 混凝土路面裂縫的控制技術(shù)
- 倍加福 KFU8-UFC 信號(hào)隔離或轉(zhuǎn)換模塊中文操作指導(dǎo)
- 普外科出科考試卷答案普外科考試題及答案
- 繪本閱讀課《Daddy Robot》
- 廠房潔凈彩鋼板墻板、吊頂施工方案(32頁(yè))
評(píng)論
0/150
提交評(píng)論