版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 48336.101-2026星闪无线通信系统第101部分:架构和通用要求
- T/ZGZS 0505-2023再生棉纱线产品碳足迹核算方法
- T/HSIPA 025-2022中医拨筋技术操作规范
- T/CISIA 008-2024电子级过硫酸盐
- T/CARD 007-2020智力障碍者用可穿戴定位设备技术要求和测试方法
- T/CSCB 0027-2024人胰岛
- 2025~2026学年内蒙古呼伦贝尔市鄂伦春自治旗人教版六年级下册期末考试数学试卷【附答案】
- 2025~2026学年广东省揭阳市普宁市人教版六年级上册学习评价(二)数学试卷【附答案】
- 2025-2026学年河南省林州市初中政治八年级期末下册自测模拟高分特训题(附答案)
- 2025-2026学年江西省樟树市初中政治八年级期末下册高分预测黑金试卷附答案
- 2026国企招聘考试(法务)历年参考题库含答案详解
- 2026年天然气分公司人员招聘笔试模拟试题及详细答案解析
- 2026年注册安全工程师考试(中级)安全生产管理试题与参考答案
- 2026年初级会计实务历年真题及答案
- 电工:低压配电系统电气故障诊断详解
- 2026相关方安全生产管理协议书汇编
- 2026年国家电网招聘之管理类通关考试题库带答案解析
- SYT 6150.2-2025《钢制管道封堵技术规范 第2部分:挡板-囊式封堵》
- GB/T 33969-2026高炉富氧喷煤技术规范
- 2026-2030中国汽车防撞梁行业发展动态与市场需求研究报告
- 2026年煤矿新工人机考题(附答案)
评论
0/150
提交评论