




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
(說明:實驗報告必須包含下面的每項內容,根據實驗情況認真填寫,封面必須打印或復印(A4紙),書寫上機實驗報告內容的紙張也用A4紙,最后從側面裝訂)一【上機實驗目的】了解棧的應用編寫迷宮程序二【實驗環境】PC機每人1臺三【上機實驗內容】(此次上機實驗老師布置的具體任務)迷宮求解主要利用棧實現,要求能動態生成迷宮,顯示有幾條路徑,用圖形界面顯示最合適的路徑。四【上機調試程序流程圖】(注:可打印)(用傳統流程圖的形式表示)五【上機調試中出現的錯誤信息、錯誤原因及解決辦法】(記錄下你調試程序中出現的錯誤信息的英文提示,分析出錯原因及可能的解決辦法)馬虎造成的錯誤程序的邏輯有問題語法用錯調試過程中,將整個程序分為一個個子塊,逐個解決六【上機調試后的源程序及還存在的問題】(注:源程序可打印)(同時記錄下你對你編寫此程序的其它具體想法,)#include<stdlib.h>#include<time.h>#include<stack>#include<queue>usingnamespacestd;#defineOVERFLOW0#defineOK1#defineERROE0#defineTRUE1#defineFALSE0#defineSIZE102//迷宮的最大范圍typedefintStatus;typedefstruct{ intx; inty;}PosType;//坐標位置typedefstruct{ PosTypeseat;//通道塊在迷宮中的"坐標位置" intdi;//從上一通道塊走向此通道塊的"方向"}SElemType;StatusCheck(char&choice);//確認輸入正確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;//設置迷宮外圍"不可走",保證只有一個出口和入口 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;//隨機生成0、1、2、3四個數 if(k) mg[i][j]=0; else{ mg[i][j]=1; }//else } mg[start.y][start.x]=0; mg[end.y][end.x]=0;//將入口、出口設置為"0"即可通過}StatusPass(PosTypee,intmg[SIZE][SIZE]){ if(mg[e.y][e.x]==0)//0時可以通過 returnOK;//如果當前位置是可以通過,返回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;//設定"當前位置"為"入口位置" q.push(e); s.push(e); do { e=q.front();//得到隊首的值 q.pop();///重復使用時,用這個初始化 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囧!不能到達終點!"); 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("請輸入確定選擇(y/n)\n"); getchar(); } } getchar();//跳過'\n' returnOK;}intmain(){ stack<SElemType>s; intmg[SIZE][SIZE]={1},size; PosTypestart,end; charchoice; system("modeconcols=200lines=200"); printf("\n==================迷宮最短路徑游戲=================="); printf("\n說明:■不能走的區域"); printf("\n'空格'代表可通過的區域"); printf("\n默認起點為左上角位置,默認終點為右下角位置\n"); printf("\n============================================\n"); printf("請輸入迷宮邊長(3~%d),系統將為你產生一個隨機迷宮:",SIZE-2); scanf("%d",&size); while((size>SIZE-2)||(size<1)) { printf("輸入有誤!\n"); printf("請輸入迷宮邊長(3~%d),系統將為你產生一個隨機迷宮:",SIZE-2);scanf("%d",&size); } size+=2;//補上外圍 getchar();//跳過'\n' start.x=1;start.y=1;//起點坐標 end.x=size-2;end.y=size-2;//終點坐標 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("請輸入迷宮邊長(3~%d),系統將為你產生一個隨機迷宮:",SIZE-2); scanf("%d",&size); while((size>SIZE-2)||(size<1)) { printf("輸入有誤!\n"); printf("請輸入迷宮邊長(3~%d),系統將為你產生一個隨機迷宮:",SIZE-2); scanf("%d",&size); } size+=2;//補上外圍 start.x=1;start.y=1;//起點坐標 end.x=size-2;end.y=size-2;//終點坐標 getchar();//跳過'\n' Random(mg,size,start,end); PrintMaze(mg,size); printf("是否使用該迷宮?(y/n)\n"); Check(choice); } printf("是否人工選擇起點和終點(y/n)?【默認:起點(1,1),終點(%d,%d)】\n",size-2,size-2); Check(choice); if((choice=='y')||(choice=='Y')) { printf("請輸入“起點”坐標(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("些位置不能為“起點”!\n"); elseprintf("輸入有誤!\n"); printf("請輸入“起點”坐標(1~%d)用空格分隔:",size-2); scanf("%d%d",&start.x,&start.y); } printf("請輸入“終點”坐標(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("些位置不能為“終點”!\n"); elseif(Equal(start,end))printf("該位置已為起點!\n"); elseprintf("輸入有誤!\n"); printf("請輸入“終點”坐標(1~%d)用空格分隔:",size-2); scanf("%d%d",&end.x,&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 內科門診病人護理常規
- 生命愛國教育
- 手術室輸血安全的護理
- 滾針操作流程護理
- 臨床護理帶教老師
- 避孕藥知識培訓課件下載
- 物聯網行業分析24
- 移動互聯網技術產業進展與發展趨勢講義
- 湖北省孝感市漢川市第二中學2024-2025學年3月高三適應性考試(一)語文試題含解析
- 廣西職業師范學院《數字移動通信原理》2023-2024學年第二學期期末試卷
- 第五屆綿陽市職業技能大賽賽項技術文件-焊工技術文件
- 拉森鋼板樁支護施工方案
- 2025年荊門市水務局事業單位公開招聘工作人員招聘歷年高頻重點模擬試卷提升(共500題附帶答案詳解)
- 六年級《盼》說課
- 云南省2025年七年級下學期語文月考試卷含答案
- 2025年中國冶金地質總局三局校園招聘48人筆試參考題庫附帶答案詳解
- 娛樂行業藝人經紀部年度工作總結
- 第十八屆“地球小博士”全國地理知識科普競賽題庫(附答案)
- 實驗室管理團隊建設與文化建設
- 2025年發展對象考試題庫附含答案
- 創業思維-創造你喜愛的人生知到智慧樹章節測試課后答案2024年秋浙江旅游職業學院
評論
0/150
提交評論