




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include #include #include #include #include #define OK 1#define ERROR 0#define NULL 0#define OVERFLOW -2 #define STACK_INIT_SIZE 100#define STACKINCREMENT 10/栈的顺序存储表示typedef struct int x;/*列*/ int y;/*行*/PosType;/坐标位置类型typedef struct int ord;/通道块在路径上的序号 PosType seat;/通道块在迷宫中的坐标位置 int di;/从此通道块走向下一通
2、道块的方向SElemType;/栈的元素类型typedef struct SElemType *base;SElemType *top;int stacksize; /当前已分配的存储空间,以元素为单位SqStack;/基本操作int InitStack(SqStack *S) S-base=(SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType); if(!S-base) exit(OVERFLOW); S-top=S-base; S-stacksize=STACK_INIT_SIZE; return OK;/若栈不空,则用e返回S的栈顶
3、元素,并返回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-stacksize)/*栈满,追加存储空间*/ S-base = (SElemType *)realloc(S-base,(S-stacksize + STACKINCREMENT) * sizeof(SElemType); if(!S-base)
4、 exit(OVERFLOW);S-top=S-base+S-stacksize;S-stacksize+=STACKINCREMENT; *S-top+=*e; return OK;/若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERRORint Pop(SqStack *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;/*列数*/
5、int hang;/*行数*/ char a999999;MazeType;/*迷宫类型*/*随机生成迷宫*/int generatemaze( MazeType *maze)int i,j;maze-a00=2; maze-a+maze-hang+maze-lie=3;/*设置外墙*/maze-a0maze-lie=!;maze-amaze-hang0=!;for(j=1;jlie;j+) maze-a0j=!;maze-amaze-hangj=!;for(i=1;ihang;i+) maze-ai0=!;maze-aimaze-lie=!;srand(unsigned)time( NULL
6、 );rand(); for(i=1; i hang; i+) for(j=1;jlie;j+) if (rand()=RAND_MAX/4) maze-aij = ; / 暗示出路 else maze-aij =!; /!暗示无出路 return OK;int Pass(MazeType *maze, PosType curpos )/判断当前位置可否通过if (curpos.x = maze-lie) return ERROR;if (curpos.y = maze-hang) return ERROR;if (maze-acurpos.ycurpos.x= ) return OK; el
7、se return ERROR;int FootPrint(MazeType *maze,PosType curpos)/留下足迹 maze-acurpos.ycurpos.x=*; return OK;int MarkPrint(MazeType *maze,PosType curpos)/留下不能通过的标记 maze-acurpos.ycurpos.x=; return OK;PosType NextPos(PosType curpos,int di)/返回当前位置的下一位置 PosType pos=curpos; switch(di) case 1:/右东 pos.x+; break;
8、case 2:/下南 pos.y+; break; case 3:/左西 pos.x-; break; case 4:/上北 pos.y-; break; return pos;/若迷宫有解,则求得一条存放在栈中(从栈底到栈顶),并返回OK,否则返回ERRORint MazePath(MazeType *maze,PosType start,PosType end) PosType curpos; SqStack *S=(SqStack *)malloc(sizeof(SqStack); InitStack(S); SElemType *e; e=(SElemType *)malloc(siz
9、eof(SElemType); curpos=start;/设定当前位置为入口位置 int curstep = 1;/探索第一步 do if(Pass(maze,curpos)/当前位置可通过 FootPrint(maze,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&!
10、StackEmpty(S)/栈不空但栈顶位置四周均不通 MarkPrint(maze,e-seat);Pop(S,e); if(e-didi+;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;ihang;i+)for(j=0;jlie;j+)printf(%c ,maze-aij);if(maze-aij=*)ck=
11、i;dk=j;k+; printf(n); n=k; for(k=0;kn;k+) printf(,ck,dk); printf(n); printf(n);int main() int zmg; char ch; printf( 数据结构课程设计-迷宫问题求解 nn); printf( |-|n); printf( | |n); printf( | |n); printf( | |n); printf( | |n); printf( | XXXX XXXXXXXXXXXXXX |n); printf( | XXXXXXX |n); printf( |-|n); getchar(); do s
12、ystem(cls); fflush(stdin); MazeType *maze=(MazeType *)malloc(sizeof(MazeType); /设置迷宫的长宽不含外墙 printf(请输入迷宫的列数(不含外墙时):); scanf(%d,&maze-lie); printf(请输入迷宫的行数(不含外墙时):); scanf(%d,&maze-hang); generatemaze(maze); printf(随机创建迷宫n); PrintMaze(maze); getchar(); getchar(); PosType start,end; start.x=1;start.y=1; end.x=maze-lie-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 喷粉挂钩管理办法
- 四无车辆管理办法
- 团委新闻管理办法
- 园区展厅管理办法
- 围餐管理办法细则
- 国企总额管理办法
- 国企问责管理办法
- 国外展会管理办法
- 国标公厕管理办法
- 碳交易咨询服务费协议
- 设计院建筑管理制度
- 2025至2030年中国量子级联激光器(QCL)行业市场专项调研及投资前景研究报告
- 2025至2030年中国连接器制造行业市场现状调查及投资方向研究报告
- 2025至2030中国市政公用工程行业项目调研及市场前景预测评估报告
- 地勤面试笔试题目及答案
- 浙江保安员考试题库及答案大全
- T/CSRA 23-2023塑料快速多因素耦合法第1部分:老化活化能的测定
- 羽毛球场馆项目可行性报告
- 《新药审批流程解析》课件
- 2025年小学语文毕业升学考试全真模拟卷(语文综合素养拓展)古诗文背诵与运用
- 诊断与评估课件 第三章 特殊儿童的评估取向与范围学习资料
评论
0/150
提交评论