基于c语言的迷宫问题课程设计

*******************实践教学*******************兰州理工大学软件学院2012 年春季学期算法与数据结构 课程设计题 目: 迷宫问题 专业班级: 姓 名: 学 号: 指导教师: 成 绩:_______________摘要在现实生活中,会遇到很多很多关于迷宫这样很复杂、很难解决的问题的问题。如果人工去解决这些问题,会很麻烦,花很长的时间,甚至无法解决。假如用计算机去解决,可以通过手动生成迷宫,也可以通过计算机随机的产生迷宫,最终退出。而且可以很快的求解迷宫,找到从入口到出口的通路,或者当没有通路时,得出没有通路的结论。找出通路之后,会显示出通路路经,而且以图示的方式显示出通路,这样会使人一目了然的看清此迷宫的通路。迷宫是一个矩形区域,可以使用二维数组表示迷宫,这样迷宫的每一个位置都可以用其行列号来唯一指定,但是二维数组不能动态定义其大小,我们可以考虑先定义一个较大的二维数组 maze[M+2][N+2],然后用它的前 m 行 n 列来存放元素,即可得到一个 m×n 的二维数组,这样(0,0)表示迷宫入口位置,(m-1,n-1)表示迷宫出口位置。关键词: 迷宫;通路;二维数组;路径序言随着社会经济的发展,信息化程度的不断深入,传统的人工求解迷宫问题已不能满足生活的需要。近几年,随着迷宫问题越来越复杂、科技也越来越发达,人们逐渐的开始用计算机求解迷宫问题。迷宫问题很复杂,但是人们又不得不去研究这个问题,因为人们的生活中需要它,离不开它。在迷宫路径的搜索过程中,首先从迷宫的入口开始,如果该位置就是迷宫出口,则已经找到了一条路径,搜索工作结束。否则搜索其上、下、左、右位置是否是障碍,若不是障碍,就移动到该位置,然后再从该位置开始搜索通往出口的路径;若是障碍就选择另一个相邻的位置,并从它开始搜索路径。为防止搜索重复出现,则将已搜索过的位置标记为 2,同时保留搜索痕迹,在考虑进入下一个位置搜索之前,将当前位置保存在一个队列中,如果所有相邻的非障碍位置均被搜索过,且未找到通往出口的路径,则表明不存在从入口到出口的路径。这实现的是广度优先遍历的算法,如果找到路径,则为最短路径。目录一、需求分析 .51.1 功能与数据需求 .51.1.1 题目要求的功能 .51.1.2 扩展功能 .51.2 界面需求 .61.3 开发环境与运行需求 .6二、概要设计 .72.1 主要数据结构 72.2 各模块函数说明 8三、详细设计 .9四、测试 .10五、使用说明 .135.1 应用程序功能的详细说明 135.2 应用程序运行环境要求 135.3 输入数据类型、格式和内容限制 13六、总结提高 .146.1 课程设计总结 146.2 开发中遇到的问题和解决方法 146.3 对自己完成课设完成情况的评价 .14参考文献 .15致 谢 .16一、需求分析1.1 功能与数据需求 问题描述:以一个 m×n 的长方形表示迷宫,0 和 1 分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。1.1.1 题目要求的功能 基本要求:首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j )指示迷宫中的一个坐标,d 表示走到下一坐标的方向。如:对于下列数据的迷宫,输出的一条通路为:(1,1,1 ), ( 1,2,2), (2,2,2)(3,2,3), ( 3,1,2),…。测试数据:迷宫的测试数据如下:左上角(1,1)为入口,右下角(9,8)为出口。1 2 3 4 5 6 7 81.1.2 扩展功能(1)编写递归形式的算法,求得迷宫中所有可能的通路;(2)以方阵形式输出迷宫及其通路0 0 1 0 0 0 1 00 0 1 0 0 0 1 00 0 0 0 1 1 0 10 1 1 1 0 0 1 00 0 0 1 0 0 0 00 1 0 0 0 1 0 10 1 1 1 1 0 0 11 1 0 0 0 1 0 11 1 0 0 0 0 0 01.2 界面需求请求输入进入程序请求输入起始位置请求输入终点位置输出方阵迷宫输出路径输出方阵路径1.3 开发环境与运行需求Visual C++6.0二、概要设计2.1 主要数据结构 输入起始位置,终点位置 判断首节点是否为通路判断路径能否走通对坐标标记 是否到达迷宫出口处左边是否存在通路 下边是否存在通路 右边是否存在通路 上边是否存在通路存储路径,将路径入栈 有解迷宫 无解迷宫 YNYNY输出迷宫 选择路径 图一.主流程图2.2 各模块函数说明typedef struct{ int pos_x[length];//进栈坐标int pos_y[length];int top; int base; }Stack; //新建结构体void initStack(Stack *p) //初始化栈Push(Stack *p,int x,int y,int d) //入栈具体操作 Pop(Stack *p,int read[2],int d) //出栈并读出前一步的坐标 initMaze(int Maze[10][9])//建立迷宫Ways(Stack *p,int Maze[10][9],int rukou_x,int rukou_y,int chukou_x,int chukou_y,int d) //具体路径的求解 menu();//调用菜单函数 main();//实现迷宫求解的主函数三、详细设计迷宫的过程可以模拟为一个搜索的过程:每到一处,总让它按左、右、上、下 4 个方向顺序试探下一个位置;如果某方向可以通过,并且不曾到达,则前进一步,在新位置上继续进行搜索;如果 4 方向都走不通或曾经到达过,则退回一步,在原来的位置上继续试探下一位置。每前进或后退一步,都要进行判断:若前进到了出口处,则说明找到了一条合适的通路;若退回到了入口处,则说明不存在合法的通路到达出口。用一个二维指针数组迷宫表示迷宫,数组中每个元素取值“0”(表示通路)或“1”(表示墙壁)。迷宫的入口点在位置(1,1)处,出口点在位置(m,n)处。设计一个模拟走迷宫的算法,为其寻找一条从入口点到出口点的通路。二维数组的第 0 行、第 m+1 行、第 0 列、第 m+1 列元素全置成“1”, 表示迷宫的外墙;第 1 行第 1 列元素和第 m 行第 m 列元素置成“0”, 表示迷宫的入口和出口;假设当前所在位置是(x,y)。沿某个方向前进一步,它可能到达的位置最多有 4。四、测试图二.进入迷宫图三.查找路径图四.退出迷宫五、使用说明5.1 应用程序功能的详细说明按提示输入数字 1 进入迷宫,输入迷宫入口,迷宫出口5.2 应用程序运行环境要求Microsoft Visual C++6.05.3 输入数据类型、格式和内容限制输入的数据都是整型(int),输入迷宫的数据间要用空格或回车隔开六、总结提高6.1 课程设计总结要能很好的掌握编程,仅仅通过简单的程序的编写是无法达成的,需要大量

c语言迷宫问题课程报告,基于c语言的迷宫问题课程设计相关推荐

  1. 8155与单片机c语言设计,51单片机课程设计报告-基于8155的8LED显示电子码表设计.doc...

    51单片机课程设计报告 --基于8155的8LED显示电子码表设计 实验目的 本次课程设计是基于51单片机在理论课程的基础上,通过电路设计.理论计算.实际编程.调试.测试.分析查找故障,解决在实际设计 ...

  2. java做一个客房管理系统定制_开题报告基于Java的酒店客房管理系统的设计与实现.doc...

    开题报告基于Java的酒店客房管理系统的设计与实现 毕业设计开题报告 课 题 名 称:基于Java的酒店客房管理系统的 设计与实现 姓 名: 班 级: 指 导 教 师: 所 在 系 部: 专 业 名 ...

  3. 电力系统matlab实验报告,基于matlab语言计算电力系统暂态稳定仿真程序实验报告.docx...

    基于matlab语言计算电力系统暂态稳定仿真程序实验报告 BeijingJiaotongUniversity 电力系统分析 暂态稳定分析实验 学院:电气工程学院 班级:xxxxxxxx 学号:xxxx ...

  4. c语言张振国实验报告,基于VisualC的黄金分割法程序设计实验报告.doc

    基于VisualC的黄金分割法程序设计实验报告 新疆农业大学机械交通学院 实验报告 基于Visual C 的黄金分割法程序设计 一 .实验目的 1. 加深对机械优化设计方法的基本理论和算法步骤的理解: ...

  5. python毕业设计开题报告-基于Python的教学互动系统的设计与实现开题报告

    基于Python的教学互动系统的设计与实现开题报告 背景: 在各种信息技术与课堂的不断探索中,我们一直在寻找一个能提高教学效率的方式,同时可以发现要提高教学效率,在课堂教学中必不可少的就是师生间的互动 ...

  6. c语言万年历流程图加程序,基于C语言的万年历(内附程序).pdf

    基于C语言的万年历(内附程序) 课程设计 课程名称 C语言程序课程设计 题目名称 编写万年历系统 学生学院 专业班级 学 号 学生姓名 指导教师 2009 年 06 月 04 日 广东工业大学课程设计 ...

  7. c语言程序设计自评报告,石家庄学院c语言程序设计自评报告.docx

    石家庄学院c语言程序设计自评报告 石家庄学院课程设计报告 课程名称:设计题目:院系:专业:班级:设计者:学号:指导教师:一.题目分析: C语言程序设计校级运动会管理系统 计算机系计算机科学与技术 XX ...

  8. c语言选择结构程序设计报告,《C语言程序设计》实验报告选择结构程序设计.doc...

    <C语言程序设计>实验报告选择结构程序设计.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会 ...

  9. 《c语言程序设计》实验报告,《C语言程序设计》实验报告模板-2013级软件工程...

    <C语言程序设计>实验报告模板-2013级软件工程 院 系: 计算机科学学院 专 业: 软件工程 年 级: 2013级 课程名称: 程序设计语言 学 号: 姓 名: 指导教师:程林辉 肖文 ...

最新文章

  1. Learun FrameWork 强大工作流引擎,让OA更智能
  2. zigbee抗干扰matlab仿真,基于Zigbee的扩频通信MATLAB仿真.doc
  3. [Asp.net]AspNetPager分页组件
  4. 问题引发由于与GI相关的python脚本中的错误,Gnome终端无法启动
  5. 分享一下我的JAVA自学历程,加上我觉得效果还不错的方法
  6. 自考教育学计算机实践考试,中山大学自考计算机实践考试的流程是什么?
  7. 深度解读Microsoft Build 2020:提升开发效率,优化开发环境
  8. RabbitMQ——消息发布订阅
  9. Go语言(二)—基本概述
  10. 邵阳市工业学校计算机29班,邵阳市南门口大祥区沙子坡文明路11号计算机学校...
  11. vue 给标签添加data属性_在Vue中获取自定义属性方法:data-id的实例
  12. sql 备份 文件大小_预测SQL备份大小
  13. android 批量扫描,Android:连续扫描所有AP(接入点)
  14. Git 常用命令(转)
  15. Atitit opencv3.0  3.1 3.2 新特性attilax总结
  16. Nginx通过反向代理实现单端口访问多个服务
  17. 使用Wireshark抓包分析TCP协议
  18. UC浏览器去广告、联网、升级(支持新版8.1)
  19. postgres 命令行建数据库表_PostgreSQL 创建表格
  20. Unity编程-初级篇

热门文章

  1. 关于THREE.js中ParametricGeometry画不出来的原因
  2. 全球及中国旋光仪行业发展格局分析及投资机会预测报告2022-2028年
  3. HP Q2612A加粉(LaserJet 1020等)
  4. 国腾GM系列,GM8284DD(GM8284DR,LT8218A)、 GM8285C、GM7123C,LVDSTTL转TTL,TTL转成单路LVDS,TTL数字信号转换成VGA
  5. linux删除用户名命令,linux删除用户的命令是什么?
  6. 【Webpack 性能优化系列(6) - code splitting 】通过代码分割来获取更小的 bundle,优化资源加载
  7. golang对map排序
  8. 微信小程序授权登录获取手机号,偶尔出现41003问题
  9. 软件测试暑期实习面试(2017)
  10. Python:使用xlrd过滤execl表中数据