数据结构迷宫源代码_第1页
数据结构迷宫源代码_第2页
数据结构迷宫源代码_第3页
数据结构迷宫源代码_第4页
数据结构迷宫源代码_第5页
已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论