ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:133.61KB ,
资源ID:17010414      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17010414.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构实验迷宫问题文档格式.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构实验迷宫问题文档格式.docx

1、stMaxSize;/ 定义栈int top=-1 /初始化栈三、算法设计要寻找一条通过迷宫的路径,就必须进行试探性搜索,只要有路可走就前进一步,无路可进,换一个方向进行尝试;当所有方向均不可走时,则沿原路退回一步(称为回溯),重新选择未走过可走的路,如此继续,直至到达出口或返回入口(没有通路)。在探索前进路径时,需要将搜索的踪迹记录下来,以便走不通时,可沿原路返回到前一个点换一个方向再进行新的探索。后退的尝试路径与前进路径正好相反,因此可以借用一个栈来记录前进路径。方向:每一个可通点有4个可尝试的方向,向不同的方向前进时,目的地的坐标不同。预先把4个方向上的位移存在一个数组中。如把上、右、下

2、、左(即顺时针方向)依次编号为0、1、2、3.其增量数组move4如图3所示。move4xy-1123图2数组move4方位示意图如下: 通路:通路上的每一个点有3个属性:一个横坐标属性i、一个列坐标属性j和一个方向属性di,表示其下一点的位置。如果约定尝试的顺序为上、右、下、左(即顺时针方向),则每尝试一个方向不通时,di值增1,当d增至4时,表示此位置一定不是通路上的点,从栈中去除。在找到出口时,栈中保存的就是一条迷宫通路。(1)下面介绍求解迷宫(xi,yj)到终点(xe,ye)的路径的函数:先将入口进栈(其初始位置设置为1),在栈不空时循环取栈顶方块(不退栈)若该方块为出口,输出所有的方

3、块即为路径,其代码和相应解释如下:int mgpath(int xi,int yi,int xe,int ye) /求解路径为:(xi,yi)-(xe,ye) struct int i; /当前方块的行号 int j; /当前方块的列号 int di; /di是下一可走方位的方位号 stMaxSize; /定义栈 int top=-1; /初始化栈指针 int i,j,k,di,find; top+; /初始方块进栈 sttop.i=xi;sttop.j=yi; sttop.di=-1;mg11=-1; while (top-1) /栈不空时循环 i=sttop.i;j=sttop.j;di=

4、sttop.di; /取栈顶方块 if (i=xe & j=ye) /找到了出口,输出路径 printf(迷宫路径如下:n); for (k=0;k=top;k+) printf(t(%d,%d),stk.i,stk.j); if (k+1)%5=0) /每输出每5个方块后换一行 printf( return(1); /找到一条路径后返回1 否则,找下一个可走的相邻方块若不存在这样的路径,说明当前的路径不可能走通,也就是恢复当前方块为0后退栈。若存在这样的方块,则其方位保存在栈顶元素中,并将这个可走的相邻方块进栈(其初始位置设置为-1) 求迷宫回溯过程如图4所示从前一个方块找到相邻可走方块之后

5、,再从当前方块找在、相邻可走方块,若没有这样的方快,说明当前方块不可能是从入口路径到出口路径的一个方块,则从当前方块回溯到前一个方块,继续从前一个方块找可走的方块。 为了保证试探的可走的相邻方块不是已走路径上的方块,如(i,j)已经进栈,在试探(i+1,j)的下一方块时,又试探道(i,j),这样会很悲剧的引起死循环,为此,在一个方块进栈后,将对应的mg数组元素的值改为-1(变为不可走的相邻方块),当退栈时(表示该方块没有相邻的可走方块),将其值恢复0,其算法代码和相应的解释如下: find=0; while (ditop=-1)&(dir=7)|(x=M)&(y=N)&(mazexy=-1)

6、For(扫描八个可以走的方向) If(找到一个可以走的方向)进入栈标志在当前点可以找到一个可以走的方向避免重复选择mazexy=-1不再对当前节点扫描 If(八个方向已经被全部扫描过,无可以通的路) 标志当前节点没有往前的路 后退一个节点搜索If(找到了目的地) 输出路径退出循环未找到路径 (4)输出从入口点到出口点的一条路径。 (5)输出标有通路的迷宫图。3.算法流程图:4.程序代码:#define M2 12 /*M2*N2为实际使用迷宫数组的大小*/#define N2 11#define maxlen M2 / 栈长度#include #includemalloc.hint M=M2-

7、2,N=N2-2;/M*N迷宫的大小typedef struct /定义栈元素的类型 int x,y,dir;elemtype;typedef struct / 定义顺序栈 elemtype stack maxlen; int top;sqstktp; struct moved /定义方向位移数组的元素类型对于存储坐标增量的方向位移数组move int dx,dy;/ void inimaze(int mazeN2)/初始化迷宫 int i,j,num; for(i=0,j=0;i=M+1;i+)/设置迷宫边界 mazeij=1;j=N+1;j+) for(i=M+1,j=0; cout原始迷

8、宫为:endl; for(i=1;=M;i+) for (j=1;=N; num=(800*(i+j)+1500) % 327;/根据MN的值产生迷宫 if (num150)&(i!=M|j!=N) mazeij=1; else mazeij=0; coutmazeij ;/显示迷宫 couttop=-1; /*inistack*/int push(sqstktp*s,elemtype x) if(s-top=maxlen-1) return(false); else s-stack+s-top=x;/*栈不满,执行入栈操作*/ return(true);/*push*/elemtype po

9、p(sqstktp *s)/*栈顶元素出栈*/ elemtype elem;topstacks-top+1); /栈不空,返回栈顶元素 /pop/void path(int mazeN2,struct moved move,sqstktp *s) /寻找迷宫中的一条通路 int i,j,dir,x,y,f; i=1;j=1;dir=0; maze11=-1; /设11为入口处 do x=i+movedir.dx;/球下一步可行的到达点的坐标 y=j+movedir.dy; if(mazexy=0) elem.x=i;elem.y=j;elem.dir=dir; f=push(s,elem);/

10、如果可行将数据入栈 if(f=false)/如果返回假,说明栈容量不足 cout栈长不足 i=x;j=y;mazexy=-1; else if (dir top=-1)/若是入口,则无通路此迷宫不通 elem.x=x; elem.y=y; elem.dir=dir;/将出口坐标入栈 f=push(s,elem);迷宫通路是: i=0; while (i top)(s-stacki.x,stacki.y- if(i+1)%4=0) i+;/void draw(int mazeN2,sqstktp *s) /在迷宫中绘制出通路逃逸路线为: int i,j;i+) /将迷宫中全部的-1值回复为0值

11、for(j=1; if(mazeij=-1) while(s-top-1) /根据栈中元素的坐标,将通路的各个点的值改为8 i=elem.x;j=elem.y; mazeij=8; for(i=1; for(j=1;%3d,mazeij); /显示已标记通路的迷宫void main() /寻找迷宫通路程序 sqstktp *s; int mazeM2N2; struct moved move8; inimaze(maze); /初始化迷宫数组 s=(sqstktp *)malloc(sizeof(sqstktp); inistack(s); /初始化栈 inimove(move); /初始化方

12、向位移数组 path(maze,move,s); /寻找迷宫通路 draw(maze,s); /绘制作出通路标记的迷宫5.运行结果收获: 这次试验总体来说还是比较简单的,因为几个思考问题都是在基本问题的源代码上进行改进和补充。有了第一次数据结构编程和测试的经验,这次试验减少了很多困难,相对来说容易多了。这次实验让我对栈和队列有了更好的理解和运用。教师评分:教师签字: 公司印章管理制度一、目的 公司印章是公司对内对外行使权力的标志,也是公司名称的法律体现, 因此,必须对印章进行规范化、合理化的严格管理,以保证公司各项业务的正常运作,由公司指定专人负责管理。二、印章的种类1、公章,是按照政府规定,

13、由主管部门批准刻制的代表公司权力的印章。2、专用章,为方便工作专门刻制的用于某种特定用途的印章,如:合同专用章、财务专用章、业务专用章、仓库签收章等。 3、手章(签名章),是以公司法人代表名字刻制的用于公务的印章。三、印章的管理规定1、印章指定专人负责保管和使用,保管印章的地方(桌、柜等)要牢固加锁,印章使用后要及时收存。2、财务专用章由财务部负责保管,向银行备案的印章,应由财务部会计、总经办分别保管。 3、印章要注意保养,防止碰撞,还要及时清洗,以保持印迹清晰。4、一般情况下不得将印章携出公司外使用,如确实因工作所需,则应由印章管理员携带印章到场盖章或监印。 5、印章管理人员离职或调任时,须

14、履行印章交接手续。四、公章刻制印章需本公司法人代表批准,并由印章管理专责人负责办理刻制并启用并交由专人进行保管。 五、印章的使用1、使用任何的印章,需由相应负责人审核签字。为方便工 作,总经理可授权印章管理专责人审核一般性事务用印。2、用印前印章管理人员须认真审核,明确了解用印的内容和目的,确 认符合用印的手续后,在用印登记簿上逐项登记,方可盖章。 3、对需要留存的材料,盖印后应留存一份立卷归档。 4、不得在空白凭证、便笺上盖章。 5、上报有关部门的文件资料,未经部门经理、总经理审签,不得盖章。 6、以公司名义行文,未经总经理签发,不得盖章。 7、按照合同会签制度的规定,所有合同和协议在会签手续齐全后方可盖章。 8、各印章管理人员如出差,应把印章移交有关人员,并办理有关交接手续。六、印章管理人员的责任1、印章管理人员要与公司签订印章管理责任书,并在“印章管理制度”上签名。2、印章管理人员不得擅自使用印章,对于非法使用印章者,造成经济损失的除赔偿损失外,还要追究其行政责任或法律责任。用 章 申 请事由:部门负责人核准时间副经理核准总经理核准

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1