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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

迷宫问题.docx

1、迷 宫 问 题洛 阳 理 工 学 院课 程 设 计 报 告 课程名称 数 据 结 构 设计题目 迷 宫 问 题 课 程 设 计 任 务 书设计题目: 迷宫问题 设计内容与要求:迷宫实验是取自心理学的一个古典实验。在该实验中,把一只老鼠从一个无顶大盒子的门放入,在盒中设置了许多墙,对行进方向形成了多处阻挡。盒子仅有一个出口,在出口处放置一块奶酪,吸引老鼠在迷宫中寻找道路以到达出口。对同一只老鼠重复进行上述实验,一直到老鼠从入口到出口,而不走错一步。老鼠经多次实验终于得到它学习走迷宫的路线。设计一个计算机程序对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。课 程 设 计 评 语

2、 成绩: 指导教师:_ 年 月 日一、 问题描述 迷宫实验是取自心理学的一个古典实验。在该实验中,把一只老鼠从一个无顶大盒子的门放入,在盒中设置了许多墙,对行进方向形成了多处阻挡。盒子仅有一个出口,在出口处放置一块奶酪,吸引老鼠在迷宫中寻找道路以到达出口。对同一只老鼠重复进行上述实验,一直到老鼠从入口到出口,而不走错一步。老鼠经多次实验终于得到它学习走迷宫的路线。设计一个计算机程序对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。二、 基本要求可以利用一个二维数组mazeij表示迷宫,其中1=i=m,1=j=n,m和n分别代表迷宫的行数和列数。 数组元素值为1表示该位置是墙壁

3、,不能通行;元素值为0表示该位置是通路。假定从maze11出发,出口位于mazemn,移动方向可以是8个方向(东、东南、南、西南、西、西北、北和东北)。计算机解迷宫时,通常用的是“穷举求解”的方法,即从入口出发,顺某一方向向前探索,若能走通,则继续往前走;否则沿原路退回,换一个方向再继续探索,直至所有可能的通路都探索到为止。为了保证在任何位置上都能沿原路退回,需要用一个后进先出的栈结构来保存从入口到当前位置的路径。三、 数据结构typedef struct listnode int adjno; struct listnode *next; listnode; typedef struct i

4、nt data; listnode *first; headnode; typedef struct headnode vexsMAX*MAX; int vexnum; int rownum; int colnum; adjlist;四、 总体设计五、 详细设计adjlist input (int mazeMAX,adjlist G) 输入迷宫矩阵,用0表示可以通过,1表示墙壁。adjlist change (int mazeMAX,adjlist G) 将二维数组转换为无向图。int travgraph(adjlist G,int record,int entry,int exit) 广度优

5、先遍历无向图。void output (int record,int entry,int exit) 找到从出口到入口的路径。以上各个函数都是从主函数中进入,利用二维数组存储数据,并转化无向为图来遍历,最终输出路径。六、 测试与调试七、 源程序清单#include #include #define MAX 15 #define NULL 0 typedef struct listnode int adjno; struct listnode *next; listnode; typedef struct int data; listnode *first; headnode; typedef

6、struct headnode vexsMAX*MAX; int vexnum; int rownum; int colnum; adjlist; adjlist G; /*输入迷宫,0为可通行,1为不可通行,用二维矩阵表示*/ adjlist input (int mazeMAX,adjlist G) int i,j; int rownum,colnum; printf(Please input the length of the maze:n); printf(rownum=); scanf(%d,&G.rownum); printf(colnum=); scanf(%d,&G.colnu

7、m); for(i=0;iG.rownum;i+) printf(Input the %d row:%d ,i+1,i+1); for(j=0;jG.colnum;j+) scanf(%d,&mazeij); return(G);/*二维数组向无向图的转化*/ adjlist change (int mazeMAX,adjlist G) int i,j; listnode *p; G.vexnum=G.rownum*G.colnum; for(i=0;iG.vexnum;i+) /*图中结点的初始化*/ G.vexsi.data=mazei/G.colnumi%G.colnum; G.vexs

8、i.first=NULL; for(i=0;iG.rownum;i+) /*将无向边用指针表示出来*/ for(j=0;j=0&mazei-1j=0) p=(listnode *)malloc(sizeof(listnode); p-adjno=(i-1)*G.colnum+j; p-next=G.vexsi*G.colnum+j.first; G.vexsi*G.colnum+j.first=p; if(i+1adjno=(i+1)*G.colnum+j; p-next=G.vexsi*G.colnum+j.first; G.vexsi*G.colnum+j.first=p; if(j-1=

9、0&mazeij-1=0) p=(listnode *)malloc(sizeof(listnode); p-adjno=i*G.colnum+j-1; p-next=G.vexsi*G.colnum+j.first; G.vexsi*G.colnum+j.first=p; if(j+1adjno=i*G.colnum+j+1; p-next=G.vexsi*G.colnum+j.first; G.vexsi*G.colnum+j.first=p; if(i-1=0&j-1=0&mazei-1j-1=0) p=(listnode *)malloc(sizeof(listnode); p-adj

10、no=(i-1)*G.colnum+j-1; p-next=G.vexsi*G.colnum+j.first; G.vexsi*G.colnum+j.first=p; if(i-1=0&j+1adjno=(i-1)*G.colnum+j+1; p-next=G.vexsi*G.colnum+j.first; G.vexsi*G.colnum+j.first=p; if(i+1=0&mazei+1j-1=0) p=(listnode *)malloc(sizeof(listnode); p-adjno=(i+1)*G.colnum+j-1; p-next=G.vexsi*G.colnum+j.f

11、irst; G.vexsi*G.colnum+j.first=p; if(i+1G.colnum&j+1adjno=(i+1)*G.colnum+j+1; p-next=G.vexsi*G.colnum+j.first; G.vexsi*G.colnum+j.first=p; return(G); /* 用int travgraph()函数广度优先遍历无向图*/ int travgraph(adjlist G,int record,int entry,int exit) listnode *p; int queueMAX*MAX,visitedMAX*MAX; /*用visited数组标记图的

12、结点是否遍历过*/ int i; int front=0,rear=1; for(i=0;iadjno=0) visitedp-adjno=1; recordp-adjno=queuefront+1; queue+rear=p-adjno; if(p-adjno=exit) goto end; p=p-next; front=front+1; end:; /*用回溯法找到从出口到入口的路径,并输出*/ void output (int record,int entry,int exit) int i=0,t; if(entry=exit&G.vexsexit.data=0) printf(It

13、s already at exportn); else if(recordexit!=-1) t=exit; printf(The most short path is as follows:n); while(t!=entry) printf(%d,%d-,t/G.colnum+1,t%G.colnum+1); t=recordt; if(+i%5=0)printf(n); printf(%d,%d,t/G.colnum+1,t%G.colnum+1); else printf(Have no path from the entrance to the exitn); void main()

14、 int entry_row,entry_col,exit_row,exit_col,entry,exit; int mazeMAXMAX; int recordMAX*MAX; G=input(maze,G); G=change(maze,G); printf(Inputting the maze entrance sits the mark(*,*):); scanf(%d,%d,&entry_row,&entry_col); printf(Inputting the maze exports to sit the mark(*,*):); scanf(%d,%d,&exit_row,&e

15、xit_col); entry=-entry_row*G.colnum+-entry_col; exit=-exit_row*G.colnum+-exit_col; travgraph(G,record,entry,exit); output(record,entry,exit); getch(); 八、 心得体会在这一周课程设计的时候,拿到问题时便对问题进行了分析,并设计了完整的程序,但在执行的时候却不尽人意,总是出现这些那些的差错,使得自己很烦恼,当然,归根结底这是自己之前学习的不足,没有深刻的意识到自己所学的远远不够,表面上自己是可以能够做好,可现实却是差距非常大,很可笑。 不过无论怎么说,终究是完成了这份课程设计,如果以后有机会,自己一定会巩固我之前所学习的知识,将各个知识点的内容都学透,才能在应用的时候不至于手忙脚乱,这也不会那也不会的干着急。 所以,一定会好好努力,弥补自己在此次课程设计中的不足。

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

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