版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、#include <stdio.h>#include <malloc.h>#include <stdlib.h>#include <string.h>#include <time.h>#define OK 1#define ERROR 0#define NULL 0#define OVERFLOW -2 #define STACK_INIT_SIZE 100#define STACKINCREMENT 10/棧的順序存儲(chǔ)表示typedef struct int x;/*列*/ int y;/*行*/PosType;/坐標(biāo)位置類(lèi)型typ
2、edef struct int ord;/通道塊在路徑上的序號(hào) PosType seat;/通道塊在迷宮中的坐標(biāo)位置 int di;/從此通道塊走向下一通道塊的方向SElemType;/棧的元素類(lèi)型typedef struct SElemType *base;SElemType *top;int stacksize; /當(dāng)前已分配的存儲(chǔ)空間,以元素為單位SqStack;/基本操作int InitStack(SqStack *S) S->base=(SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType); if(!S->base)
3、 exit(OVERFLOW); S->top=S->base; S->stacksize=STACK_INIT_SIZE; return OK;/若棧不空,則用e返回S的棧頂元素,并返回OK;否則返回ERRORint GetTop(SqStack *S,SElemType *e) if(S->top=S->base) return ERROR; *e=*(S->top-1); return OK;int Push(SqStack *S,SElemType *e)/插入元素e作為新的棧頂元素 if(S->top-S->base>=S->
4、;stacksize)/*棧滿(mǎn),追加存儲(chǔ)空間*/ 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; return OK;/若棧不空,則刪除S的棧頂元素,用e返回其值,并返回OK;否則返回ERRORint Pop(S
5、qStack *S,SElemType *e) if(S->top=S->base) return ERROR; *e=*-S->top; return OK;int StackEmpty(SqStack *S) return(S->top=S->base) ;/迷宮程序typedef struct int lie;/*列數(shù)*/ int hang;/*行數(shù)*/ char a999999;MazeType;/*迷宮類(lèi)型*/*隨機(jī)生成迷宮*/int generatemaze( MazeType *maze)int i,j;maze->a00=2; maze-&g
6、t;a+maze->hang+maze->lie=3;/*設(shè)置外墻*/maze->a0maze->lie='!'maze->amaze->hang0='!'for(j=1;j<maze->lie;j+) maze->a0j='!'maze->amaze->hangj='!'for(i=1;i<maze->hang;i+) maze->ai0='!'maze->aimaze->lie='!'srand(un
7、signed)time( NULL );rand(); for(i=1; i <maze->hang; i+) for(j=1;j<maze->lie;j+) if (rand()>=RAND_MAX/4) maze->aij =' ' /' ' 暗示出路 else maze->aij ='!' /'!'暗示無(wú)出路 return OK;int Pass(MazeType *maze, PosType curpos )/判斷當(dāng)前位置可否通過(guò)if (curpos.x < 1) | (cu
8、rpos.x >= maze->lie) return ERROR;if (curpos.y < 1) | (curpos.y >= maze->hang) return ERROR;if (maze->acurpos.ycurpos.x=' ') return OK; else return ERROR;int FootPrint(MazeType *maze,PosType curpos)/留下足跡 maze->acurpos.ycurpos.x='*' return OK;int MarkPrint(MazeTyp
9、e *maze,PosType curpos)/留下不能通過(guò)的標(biāo)記 maze->acurpos.ycurpos.x='' return OK;PosType NextPos(PosType curpos,int di)/返回當(dāng)前位置的下一位置 PosType pos=curpos; switch(di) case 1:/右東 pos.x+; break; case 2:/下南 pos.y+; break; case 3:/左西 pos.x-; break; case 4:/上北 pos.y-; break; return pos;/若迷宮有解,則求得一條存放在棧中(從棧底
10、到棧頂),并返回OK,否則返回ERRORint MazePath(MazeType *maze,PosType start,PosType end) PosType curpos; SqStack *S=(SqStack *)malloc(sizeof(SqStack); InitStack(S); SElemType *e; e=(SElemType *)malloc(sizeof(SElemType); curpos=start;/設(shè)定當(dāng)前位置為入口位置 int curstep = 1;/探索第一步 do if(Pass(maze,curpos)/當(dāng)前位置可通過(guò) FootPrint(maz
11、e,curpos); e->ord=curstep; e->seat=curpos; e->di=1; Push(S,e); if(curpos.x=end.x&&curpos.y=end.y) return (OK); curpos=NextPos(curpos,1); curstep+; else if(!StackEmpty(S) Pop(S,e); while(e->di=4&&!StackEmpty(S)/棧不空但棧頂位置四周均不通 MarkPrint(maze,e->seat);Pop(S,e); if(e->di
12、<4)/棧不空且棧頂位置四周有其他位置未探索 e->di+;Push(S,e); curpos=e->seat; curpos=NextPos(curpos,e->di); while(!StackEmpty(S);return ERROR;void PrintMaze(MazeType *maze)/打印迷宮 int i,j,k,n; int c999,d999; for(i=0,k=0;i<=maze->hang;i+)for(j=0;j<=maze->lie;j+)printf("%c ",maze->aij);i
13、f(maze->aij='*')ck=i;dk=j;k+; printf("n"); n=k; for(k=0;k<n;k+) printf("<%d,%d>",ck,dk); printf("n"); printf("n");int main() int zmg; char ch; printf(" 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-迷宮問(wèn)題求解 nn"); printf(" |-|n"); printf(" | |n"); pr
14、intf(" | |n"); printf(" | |n"); printf(" | |n"); printf(" | XXXX XXXXXXXXXXXXXX |n"); printf(" | XXXXXXX |n"); printf(" |-|n"); getchar(); do system("cls"); fflush(stdin); MazeType *maze=(MazeType *)malloc(sizeof(MazeType); /設(shè)置迷宮的
15、長(zhǎng)寬不含外墻 printf("請(qǐng)輸入迷宮的列數(shù)(不含外墻時(shí)):"); scanf("%d",&maze->lie); printf("請(qǐng)輸入迷宮的行數(shù)(不含外墻時(shí)):"); scanf("%d",&maze->hang); generatemaze(maze); printf("隨機(jī)創(chuàng)建迷宮n"); PrintMaze(maze); getchar(); getchar(); PosType start,end; start.x=1;start.y=1; end.x=maze->lie-1;end.y=maze->hang-1; zmg
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 體育館環(huán)境衛(wèi)生承諾書(shū)
- 2024年研發(fā)設(shè)計(jì)與技術(shù)咨詢(xún)協(xié)議3篇
- 證券公司投資資產(chǎn)管理
- SP館租賃合同模板
- 鐵路軌道施工安全合同
- 設(shè)計(jì)工作室隔斷租賃協(xié)議
- 跨境支付項(xiàng)目澄清函參考模板
- 環(huán)保行業(yè)污染防治培訓(xùn)費(fèi)管理辦法
- 能源利用評(píng)審員管理辦法
- 機(jī)場(chǎng)化糞池改造工程合同
- 脊柱區(qū)1教學(xué)講解課件
- KK5-冷切鋸操作手冊(cè)-20151124
- 教你炒紅爐火版00纏論大概
- 消防管道施工合同
- 大學(xué)生計(jì)算與信息化素養(yǎng)-北京林業(yè)大學(xué)中國(guó)大學(xué)mooc課后章節(jié)答案期末考試題庫(kù)2023年
- 2023年國(guó)開(kāi)大學(xué)期末考復(fù)習(xí)題-3987《Web開(kāi)發(fā)基礎(chǔ)》
- 《駱駝祥子》1-24章每章練習(xí)題及答案
- 國(guó)際金融課后習(xí)題答案(吳志明第五版)第1-9章
- 《基于杜邦分析法周大福珠寶企業(yè)盈利能力分析報(bào)告(6400字)》
- 全國(guó)英語(yǔ)等級(jí)考試三級(jí)全真模擬試題二-2023修改整理
- 02R112 拱頂油罐圖集
評(píng)論
0/150
提交評(píng)論