暑期第三周总结
作者:互联网
本周实现了数据结构小学期第二阶段的一个迷宫游戏
先展示一下实现结果
项目简介:
摘 要
该系统的功能是以窗口界面工作,用户可以点击界面上的不同按钮,实现相应的功能。
迷宫的自动生成功能——用户可以输入迷宫的宽和高,然后系统可以随街生成一个迷宫
迷宫的手动生成功能——用户可以输入迷宫的宽和高,然后生成初始迷宫,用户可以点击迷宫块,指定迷宫的路和墙以及终点起点。
DFS寻路功能——用户点击DFS寻路按钮,系统会使用DFS算法,找到从起点到终点的一条路,并以不同的颜色显示在界面上。
BFS寻路功能——用户点击BFS寻路按钮,系统会使用BFS算法,找到起点和终点的一条路,并以不同的颜色显示在界面上,根据BFS算法,生成的路是最短的。
程序在设计的过程中遇到的问题已及时更正,但由于编者的能力和水平有限,迷宫系统和文档不免出现一些不期待的错误,望文档读者谅解,并欢迎及时提醒和改正,在此表示谢意。
关键词:数据结构,BFS,DFS,PRIM
开发引言
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
数据结构的研究内容是构造复杂软件系统的基础,它的核心技术是分解与抽象。通过分解可以划分出数据的3个层次;再通过抽象,舍弃数据元素的具体内容,就得到逻辑结构。类似地,通过分解将处理要求划分成各种功能,再通过抽象舍弃实现细节,就得到运算的定义。上述两个方面的结合可以将问题变换为数据结构。这是一个从具体(即具体问题)到抽象(即数据结构)的过程。然后,通过增加对实现细节的考虑进一步得到存储结构和实现运算,从而完成设计任务。这是一个从抽象(即数据结构)到具体(即具体实现)的过程。
本次课程设计,利用数组实现迷宫节点的存储,利用BFS,DFS实现迷宫寻路,
利用PRIM实现自动生成迷宫。
实验体会
1、对系统、对过程的总结体会
系统设计方面:该迷宫系统的实际比较匆忙,因为之前根本没有接触后窗口话图形界面的编写,随意本次实验也促使我学习的图形化界面的编写,学习了在java中使用swing库来绘制图形化界面,也简单的了解了其中提供的一些组件的效果和使用方法。比如通过JFrame类来整体创建窗口界面,通过panel类来承载一些组件,比如按钮组件,文本输入框组件,也了解了组件的继承和重写,在系统实验过程中,我通过继承按钮组件,添加额外的属性,实现了迷宫节点的显示,通过给在构造函数中设置事件监听器实现了每个节点被创建出来就有了事件监听器,从而方便的展示的不同大小的迷宫格。
寻路算法实现方面:在迷宫寻路过程中,基本算法有宽度优先搜索和深度优先搜索两种,两种算法方便理解,可以构造一颗搜索树,宽度优先是分别遍历每一次的节点,所以在宽度遍历中,第一次遍历到的是最近的一个节点(前提条件是每一条路径都是相等的),所以我们可以使用队列这种数据结构实现,基本原理就是每次取出队头元素,将队头元素可以遍历到的所有节点入队。深度优先是每次遍历到该点可以遍历到的最后一个节点,所以这张情况对应递归操作,是用栈实现的,但是因为系统会自动维护一个栈,所以我们不用自己手写一个栈。在深搜过程中存在剪枝和回溯两种操作,剪枝就是当前节点就可以直接判断情况不成立的情况下,就直接可以退出本次遍历就叫剪枝,回溯对应每次遍历完该节点下的所有节点回到该节点,进入另一个状态,要将之前遍历的节点进行的操作恢复现场就叫回溯。回溯保证可以正确的遍历下去,剪枝可降低时间复杂度。
自动生成迷宫方面:自动生成迷宫我利用了PIRM算法的思想,在用户输入迷宫的宽高,并点击自动生成迷宫按钮时,会先生成一个全是墙的迷宫,然后使用随机函数自动生成起点和终点的坐标。然后从起点开始,随机生成一个方向,走到下一个方向,将该点加入到集合中,知道终点也加入到集合中位置,在将集合中的点设置为路就自动生成了迷宫。
2、对系统不足的描述并提出改进方案。
系统实现上的不足:在多次自动生成迷宫后,前一次的迷宫界面会缓存到页面上,只要鼠标经过就会显示新生成的界面。
系统编写上的不足:实现的方法比较混乱,结构不太清晰,注释比较少,不方便阅读,写的逻辑比较难懂,所以过一段时间会记不清代码执行的流程。
改进方案:后期可以优化代码的结构,将一些功能进行抽取,提供方法的复用度。
标签:总结,遍历,实现,第三周,迷宫,暑期,生成,数据结构,节点 来源: https://www.cnblogs.com/open52000/p/16484853.html