目录

实验要求:

算法简介:

prim算法:

A*算法:


实验要求:

该项目的主要要求是:首先生成一个迷宫,要求随机生成。而生成迷宫有深度优先算法、prim算法、递归分割算法等。老师说建议使用prim算法。这个算法并不难理解,并且生成的迷宫也比较自然随机。其次,要求玩家走迷宫,留下足迹。最后,要求系统使用A*算法寻路,输出最终路径。整个过程要求基本的鲁棒性,也就是生成的迷宫要存在一条正确的道路,并且A*算法能够正确的找到这条路。

算法简介:

prim算法:

算法描述(出自百度百科):

1).输入:一个加权连通图,其中顶点集合为V,边集合为E;

2).初始化:Vnew = {x},其中x为集合V中的任一节点(起始点),Enew = {},为空;

3).重复下列操作,直到Vnew = V:

a.在集合E中选取权值最小的边<u, v>,其中u为集合Vnew中的元素,而v不在Vnew集合当中,并且v∈V(如果存在有多条满足前述条件即具有相同权值的边,则可任意选取其中之一);

b.将v加入集合Vnew中,将<u, v>边加入集合Enew中;

4).输出:使用集合Vnew和Enew来描述所得到的最小生成树。

我理解的算法思路:

下面我们对下面这幅图求其最小生成树:

1.假设我们从顶点v1开始,所以我们可以发现(v1,v3)边的权重最小,所以第一个输出的边就是:v1—v3=1:

2.然后,我们要从v1和v3作为起点的边中寻找权重最小的边,首先了(v1,v3)已经访问过了,所以我们从其他边中寻找,发现(v3,v6)这条边最小,所以输出边就是:v3—-v6=4

3.然后,我们要从v1、v3、v6这三个点相关联的边中寻找一条权重最小的边,我们可以发现边(v6,v4)权重最小,所以输出边就是:v6—-v4=2.

4.然后,我们就从v1、v3、v6、v4这四个顶点相关联的边中寻找权重最小的边,发现边(v3,v2)的权重最小,所以输出边:v3—–v2=5

5.然后,我们就从v1、v3、v6、v4,v2这2五个顶点相关联的边中寻找权重最小的边,发现边(v2,v5)的权重最小,所以输出边:v2—–v5=3

6.最后,我们发现六个点都已经加入到集合U了,我们的最小生成树建立完成。

A*算法:

先描述A*算法的大致过程:

  1. 将初始节点放入到open列表中。
  2. 判断open列表。如果为空,则搜索失败。如果open列表中存在目标节点,则搜索成功。
  3. 从open列表中取出F值最小的节点作为当前节点,并将其加入到close列表中。
  4. 计算当前节点的相邻的所有可到达节点,生成一组子节点。对于每一个子节点:

如果该节点在close列表中,则丢弃它。

如果该节点在open列表中,则检查其通过当前节点计算得到的F值是否更小,如果更小则更新其F值,并将其父节点设置为当前节点。

如果该节点不在open列表中,则将其加入到open列表,并计算F值,设置其父节点为当前节点。

5.转到2步骤

核心思想
  公式: f(n) = g(n) + h(n)
  其中, f(n) 是从初始状态经由状态n到目标状态的代价估计,g(n) 是在状态空间中从初始状态到状态n的实际代价,h(n) 是从状态n到目标状态的最佳路径的估计代价,保证找到最短路径(最优解的)条件,关键在于估价函数f(n)的选取(或者说h(n)的选取)。

如上图所示:大致思路就是每次都选择f最小的方块走,当有多个方块f相同时,不走回头路,按来时的方向继续走下去。

实验三、prim算法生成迷宫,A*算法解迷宫(实验准备)相关推荐

  1. mybatis-plus雪花算法生成Id使用详解

    文章目录 前言 一.mybatis-plus官网 二.雪花算法实战 1.建表 2.新建测试工程 3.单元测试 三.实现分析 四.为什么默认就是雪花算法 五.主动设置Id生成策略 六.内置的雪花算法工具 ...

  2. php dsa 签名,openssl使用DSA算法生成签名实例详解_PHP教程

    文章给大家介绍基于openssl使用DSA算法生成签名实例,生成签名方法很简单,我们需要懂得中间的原理就比较复杂了,大家一起来看看吧. 命令: openssl> dgst -dss1 -sign ...

  3. 20175208 实验三《敏捷开发与XP实践》_实验报告

    20175208 实验三 敏捷开发与XP实践 实验报告封面: 课程:Java程序设计 班级:1752班 姓名:张家华 学号:20175208指导教师:娄嘉鹏 实验日期:2019年4月28日实验序号:实 ...

  4. python程序设计实验指导书第1版实验三十四_《python编程基础》实验指导书.doc

    <python编程基础>实验指导书 PAGE 南 阳 理 工 学 院 <python编程基础>实验指导书 (2014版) 软件学院·软件工程教研室 2011.3 目录 TOC ...

  5. 决策树的生成-ID3算法生成_例题详解

    数据集: 判断特征集是否是空集,进行下一步 选择信息增益最大的那个特征作为根节点,以"有自己的房子"作为限定条件看其他特征 D1(有自己的房子)不确定性为0,以D2(没有自己的房子 ...

  6. 实验三 敏捷开发与XP实践

    目录 实验三 敏捷开发与XP实践-1 实验步骤 实验截图 实验三 敏捷开发与XP实践-2 实验步骤 实验截图 代码链接 实验三 敏捷开发与XP实践-3 实验步骤 实验截图 代码链接 实验三 敏捷开发与 ...

  7. 基础实验——三轴传感器

    基础实验--三轴传感器 MMA7660FC 测速原理 加速度传感器实验 所选设备 基本案例 示例代码:制作水平仪 加速度传感器是一种能够测量加速度的传感器.通常由质量块.阻尼器.弹性元件.敏感元件和适 ...

  8. Linux实验三父子进程每隔3秒,实验三进程的创建和简单控制(学生分析.doc

    实验三进程的创建和简单控制(学生分析 实验 进程的创建和简单控制 实验目的: 掌握进程的概念和进程的状态,对进程有感性的认识: 掌握进程创建方法: 认识进程的并发执行,了解进程族之间各种标识及其存在的 ...

  9. 软件测试的硬件资源,实验三计算机硬件软件资源测试与浏览.docx

    实验三计算机硬件软件资源测试与浏览 PAGE \* MERGEFORMAT4 实验三 计算机硬件.软件资源查询与硬件测试 (一).实验教学目标 1.知道计算机系统的组成(软件.硬件),掌握查询计算机软 ...

  10. 合肥学院计算机原理,合肥学院计算机组成原理实验三-20210415130709.docx-原创力文档...

    精品文档 精品文档 PAGE 精品文档 合肥学院计算机组成原理实验三 --------------------------------作者:------------------------------ ...

最新文章

  1. react中context到底是如何传递的-源码分析
  2. 十大最急需IT技术人才榜:Java开发人员领跑
  3. linux查看注册表信息,linux登录档(日志)相关简介
  4. Java面试集合(二)
  5. NETINT刘伟:ASIC才是未来
  6. 国际千人基因组计划数据库怎么用起来?
  7. Android程序设计报告总结,Android编程常用技巧实例总结
  8. python常用程序代码(持续更新收集)
  9. Android Framework实战视频系列
  10. JavaScript截取分割字符串
  11. 百度高德谷歌地图与大地坐标系相互转换
  12. 计算机专业—毕业设计题目大全
  13. [20190227]Windows系统评估工具winsat.txt
  14. 【电脑问题】win10系统
  15. 世界上最震撼的屏幕保护程序
  16. java作业 温度换算,温度换算-温度转换-温度计算器
  17. 个人云盘、企业云盘傻傻分不清楚?3分钟带你清晰两者差异!...
  18. 《EROFS: A Compression-friendly Readonly File System for Resource-scarce Devices》
  19. c语言规定对于一个正常运行的c程序,下列叙述中正确的是,计算机二级C语言复习第*周...
  20. sql 取第一条数据

热门文章

  1. wps文档复制粘贴序号_wps 中word文档插入表格,如何插入的表格中实现 序号的自动 填写...
  2. 为了练习自己的Python基础语法,我用pygame写了一个打砖块闯关的游戏
  3. MPTCP 源码分析(三) 子路径选择
  4. MATLAB编程 利用Hough变换检测圆
  5. 建造者模式详解:建造随意搭配的肯德基套餐
  6. 多分类f1分数_所以多分类情况下sklearn的f1值到底是怎么计算的
  7. 《计量经济学》学习笔记之虚拟变量及滞后变量模型
  8. 混沌数学之非线性电路电容中的混沌控制系统
  9. echarts自定义下载图表
  10. 蓝桥-ALGO-40-会议中心