实验三:
由于实验是迷宫小游戏,存在最短路径问题,所以查资料可知道解决最小生成树问题有Prime算法和Kruskal算法,根据网上资料,我将他们总结为以下:
一:Prim算法
从任意一个顶点开始,每次选择一个与当前顶点集最近的一个顶点,并将两顶点之间的边加入到树中。Prim算法在找当前最近顶点时使用到了贪婪算法。
算法描述:
- 在一个加权连通图中,顶点集合V,边集合为E
- 任意选出一个点作为初始顶点,标记为visit,计算所有与之相连接的点的距离,选择距离最短的,标记visit.
- 重复以下操作,直到所有点都被标记为visit:
在剩下的点钟,计算与已标记visit点距离最小的点,标记visit,证明加入了最小生成树。
二:Kruskal算法
其算法原理为:
1.将每个顶点放入其自身的数据集合中
2.按照权值的升序来选择边。当选择每条边时,判断定义边的顶点是否在不同的数据集中。如果是,将此边插入最小生成树的集合中,同时,将集合中包含每个顶点的联合体取出,如果不是,就移动到下一条边。重复这个过程直到所有的边都探查过。
三:深度寻路算法
使用的是栈模板,通过将其走过的点的坐标压入栈中,然后遍历其所在位置的各个方向寻找可以通行的"路径",这次实验中我选择的是通过栈的方式来实现。
因为栈是先进后出,所以游戏中可以设置一个坐标系:
如图所示,以黄色为起点,蓝色为终点。
代码中默认设置的方向遍历顺序为上下左右
比如黄色点先判断上,有障碍,接着左右也是障碍,最后只有下可以走
然后1.1坐标是起点,接下来就是往下2.1
上判断障碍之后就到下判断,然后下判断可以走就会直接往下走,一直走到10.1没路走了
就会往后退栈