




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#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;/从此通道块走向下一通道块的方向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的栈顶元素,并返回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) 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;/*列数*/ 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 );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; else 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; 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(sizeof(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&!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=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 system(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年差容式力平衡传感器项目建议书
- 水肌酸产品项目建议书(范文模板)
- 2025年核辐射剂量防护仪器设备项目发展计划
- 2025年丙二酮项目建议书
- 2025年特殊功能复合材料及制品项目合作计划书
- 五年级上册语文少年中国说-教案
- 五年级语文《狼牙山五壮士》教案
- 2025年宠物电商合作协议书
- 临床、口腔医师申报卫生高级职称工作量登记表
- GB/T 10045-2018非合金钢及细晶粒钢药芯焊丝
- GB 7099-2015食品安全国家标准糕点、面包
- 2023年纳雍县财政局系统事业单位招聘笔试题库及答案解析
- 2023年广东省普通高中学业水平考试及参考答案
- 建筑工程模板施工工艺技术要点讲义丰富课件
- 永能选煤厂生产安全事故应急救援预案
- 浙江省建设领域简易劳动合同(A4版本)
- 位置度公差以及其计算
- 氯化铵危险化学品安全周知卡
- 浙江省本级公务车辆租赁服务验收单(格式)
评论
0/150
提交评论