迷宫程序设计报告(c语言)(共9页).doc

上传人:飞****2 文档编号:13505593 上传时间:2022-04-29 格式:DOC 页数:9 大小:106.50KB
返回 下载 相关 举报
迷宫程序设计报告(c语言)(共9页).doc_第1页
第1页 / 共9页
迷宫程序设计报告(c语言)(共9页).doc_第2页
第2页 / 共9页
点击查看更多>>
资源描述

《迷宫程序设计报告(c语言)(共9页).doc》由会员分享,可在线阅读,更多相关《迷宫程序设计报告(c语言)(共9页).doc(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上迷宫运行是的一些结果:以下迷宫是教材上p50 图-3.4的迷宫:接下:以上两个界面为程序运行时分割的两部分。编辑是遇到的困难:首先,经过多次调试,程序已经没有错误了,但是在运行后,迷宫路径总是不能完整表示出来。多次查找原因后才知道自己对一些函数结果状态代码定义错误。例如:将error、FALSE定义为-1、-2,。将其定义为0后则能正确表现迷宫路径。之后,我又想除了自己手动创建迷宫之外,能不能在一个结构类型中定义一个mazetype maze2.a【maxlen】【maxlen】,使其初始化并附值,当要用时直接调用就可以了,但是照这样做了之后,总是发现有错误。我想可能

2、是文件后缀名得原因,可能在cpp文件不能这样用,所以索性就部编辑了,让函数只有一个功能。迷宫程序源代码:/迷宫程序 2011/4/3#include #include#include#define overflow -1#define error 0#define TRUE 1#define FALSE 0#define ok 1#define max_stacksize 100#define increase_size 10#define maxlen 10typedef structint row;int col;postype; /坐标位置类型typedef struct int ord

3、;postype seat;int di;elemtype; /栈的元素类型typedef struct sqstackelemtype *base;elemtype *top;int stacksize;sqstack; /栈类型typedef struct mazetypeint row;int col;char amaxlenmaxlen;mazetype; /迷宫类型int Initmaze(mazetype &maze);int mazepath(mazetype &maze,postype start,postype end);int Initstack(sqstack &s);i

4、nt push(sqstack &s,elemtype e); int pop(sqstack &s,elemtype &e); int stackempty(sqstack &s); int gettop(sqstack &s,elemtype &e);int destroystack(sqstack &s);int pass(mazetype &maze,postype curpos);int footprint(mazetype &maze,postype curpos);int markprint(mazetype &maze,postype curpos); postype next

5、pos(postype &curpos,int i); void outputmaze(mazetype &maze);void main() int i,j;char cn; postype start,end; mazetype maze;dodoprintf(*手动创建迷宫*n);Initmaze(maze);printf(*迷宫输出图为*n);outputmaze(maze);printf(n-请输入迷宫入口坐标:);scanf(%d%d,&start.row,&start.col);if(start.rowmaze.row|start.colmaze.col)printf(-输入坐标

6、有误!n);continue;while(start.rowmaze.row|start.colmaze.col);printf(n-请输入迷宫出口坐标:);scanf(%d%d,&end.row,&end.col);if(!mazepath(maze,start,end)printf(n*迷宫没有出口路径!*n);elseprintf(*输出迷宫路径(*表示迷宫通道路径,表示曾走过但不能走通的标记)*n);outputmaze(maze);/case 2:/mazetype maze2;/maze2.amaxlenmaxlen=;1,1,1,1,1,1,1,1,1,1;1,0,0,1,0,0

7、,0,1,0,1;1,0,0,1,0,0,0,1,0,1;/1,0,0,0,0,1,1,0,0,1;1,0,1,1,1,0,0,0,0,1;1,0,0,0,1,0,0,0,0,1;1,0,1,0,0,0,1,0,0,1;/1,0,1,1,1,0,1,1,0,1;1,1,0,0,0,0,0,0,0,1;1,1,1,1,1,1,1,1,1,1;/printf(是否继续-y:继续 n:结束n);scanf(%s,&cn);while(cn=y|cn=n);int Initmaze(mazetype &maze) /以数组形式创建迷宫,不包括行数和列数int i,j,m,n;printf(*请输入所要

8、创建的迷宫的行数和列数*n);scanf(%d%d,&maze.row,&maze.col);printf(-以0代表通路,以1代表障碍(行列数包括墙壁)nn);for(j=0;j=maze.col+1;j+)maze.a0j=#;maze.amaze.row+1j=#;for(i=1;imaze.row+1;i+)maze.ai0=#;maze.aimaze.col+1=#;for(i=1;imaze.row+1;i+)for(j=1;j=max_stacksize)s.base=(elemtype *)realloc(s.base,(increase_size+s.stacksize)*s

9、izeof(elemtype);if(!s.base)exit(overflow);s.top=s.base+s.stacksize;s.stacksize+=increase_size;*s.top+=e;return ok;int pop(sqstack &s,elemtype &e) /出栈if(s.top=s.base)return error;e=*-s.top;return ok;int gettop(sqstack &s,elemtype &e) /返回栈顶元素 if(s.top=s.base)return error;e=*(s.top-1);return ok;int sta

10、ckempty(sqstack &s) /判断是否为空栈if(s.top=s.base)return TRUE;elsereturn FALSE;int destroystack(sqstack &s) /销毁栈free(s.base);s.top=s.base;return ok;int pass(mazetype &maze,postype curpos) /当前位置未通过时if(maze.acurpos.rowcurpos.col=0)return TRUE;elsereturn FALSE;int footprint(mazetype &maze,postype curpos) /留下

11、足迹maze.acurpos.rowcurpos.col=*; /*表示可通的标记return TRUE;int markprint(mazetype &maze,postype curpos) /表示曾走过但不能走通的标记maze.acurpos.rowcurpos.col=;return TRUE;postype nextpos(postype &curpos,int i) /探索当前位置的下一个方向,东南西北分别表示为1234postype newcurpos;newcurpos=curpos;switch(i)case 1:newcurpos.col+=1;newcurpos.row=

12、curpos.row;break; case 2:newcurpos.row+=1;newcurpos.col=curpos.col;break; case 3:newcurpos.col-=1;newcurpos.row=curpos.row;break;case 4:newcurpos.row-=1;newcurpos.col=curpos.col;break;default:exit(error);return newcurpos;void outputmaze(mazetype &maze)int i,j;printf( );for(i=0;i=maze.row+1;i+)printf

13、(%4d,i);printf(n);for(i=0;i=maze.row+1;i+)printf(%4d,i);for(j=0;j=maze.col+1;j+)printf(%4c,maze.aij);printf(n);/printf(n);int mazepath(mazetype &maze,postype start,postype end) /求解迷宫路径函数sqstack s;int curstep=1;elemtype e;postype curpos; Initstack(s);curpos=start;doif(pass(maze,curpos)footprint(maze,

14、curpos);e.ord=curstep; /e=(curstep,curpos,1);e.seat=curpos;e.di=1;push(s,e);if(curpos.row=end.row&curpos.col=end.col)return (TRUE);printf(起点极为终点!n);destroystack(s);curpos=nextpos(curpos,1);curstep+;elseif(!stackempty(s)pop(s,e);while(e.di=4&!stackempty(s)markprint(maze,e.seat);pop(s,e);curstep-;if(e.di4)e.di+;push(s,e);curpos=nextpos(e.seat,e.di);/gettop(maze,e);while(!stackempty(s);return (FALSE); 专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁