[迷宫中的算法实践]关于一个数据结构与算法实践作业的总结

最近听闻数据结构与算法实践课的老师又出了和上年一样的选题,不禁想起了去年自己完成作业时的点点滴滴,遗憾当时没有写博客的习惯,之前的一些心得这一年实践的过去也逐渐淡忘了,突然就有了总结一下的想法,希望能有新的收获吧。

由于当时也没注意保存,软件完成过程中的一些文档早已丢失了,幸运的是Winform版源码还在,Unity3D版程序也还幸存,虽然由于时间紧张只完成了大概框架,但美观程度也远非Winform可以相比的,先上几张软件图吧:

生成算法

软件实现了普利姆算法、递归回溯算法、递归分割算法和深度遍历图算法四种算法来完成迷宫的生成,前两种算法生成的迷宫本质上是一个二维矩阵网络形式的生成树,也就是说其中没有回路,同时从左下角的起点到迷宫中的每一点都有且仅有一条路径,递归分割法虽然不是生成树算法但是同样属于没有回路的迷宫生成算法,深度遍历图算法则来源于知网上的一篇论文,属于图的深度遍历算法,生成的迷宫随机性更强,路径也不止一条,但不得不说的确扮相比较差。

普利姆算法迷宫(Prim)

递归分割算法(Recursive division)

递归回溯(Recursive backtracker)

深度遍历图(Deep traversal graph)

寻路算法

至于寻路算法,软件实现了深度优先遍历、广度优先遍历、和A-Star三种算法,前两种自不必说,A-Star算法是一种启发式搜索算法,移动时会评估向周围八个方向行走的预期代价,实时选出更小代价的移动方向,不过因为生成的迷宫均为正方形迷宫且起点和终点固定为左上和右下,所以在本项目中,A-Star算法并未发挥出它应有的机智,效率与广度优先基本相同。后两种算法可以寻找到最短路径,而深度优先则并不能展示。图中绿色为正确路线,蓝色为寻路过程中经过的路线。。(PS:设定为深度广度四方向移动,A-Star八方向移动)

深度优先遍历(DFS)

广度优先遍历(BFS)

A-Star

因为实例中的迷宫入口出口位置的特殊性,广度优先在寻路过程中基本要走完全称,显得有些不太机智

本文章属于综述,后面的算法会分篇分别阐述。

时间: 2024-10-13 06:39:55

[迷宫中的算法实践]关于一个数据结构与算法实践作业的总结的相关文章

这谈的数据结构和算法2好基友[数据结构和算法]

在本文中,小乌龟的数据结构和算法的教学视频学习笔记 第一章:谈谈数据结构和算法这2个好基友 一.聊聊数据结构 1.为什么学数据结构?编程能力有质的飞越,不再停留在调用现成的API,做一个上档次的程序猿. 2.什么是数据结构?数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的学科. 思考:好吧,简单来说程序设计 =数据结构 + 算法,数据结构就是关系,就是数据元素之间存在的一种或多种特定关系的集合. 3.数据结构分为逻辑结构和物理结构,前者指数据对象中数据

游戏制作中的大宝剑---常用的数据结构与算法

前言 时间流逝,物是人非,就好像涌动的河流,永无终焉,幼稚的心智将变得高尚,青年的爱慕将变得深刻,清澈之水折射着成长. ----------<塞尔塔传说> PS:为了方便大家阅读,个人认为比较重要的内容-------红色字体显示 个人认为可以了解的内容-------紫色字体显示 --------------------------------------------------------------------------- ---------------------------------

如何快速查找到多个字典中的公共键(Key)---Python数据结构与算法相关问题与解决技巧

如何快速查找到多个字典中的公共键(Key)-?   实际案例: 西班牙足球甲级联赛,每轮球员进球统计: 第1轮: { '苏亚雷斯':1,'梅西':2,'本泽马':1,...} 第2轮: { '苏亚雷斯':1,'C罗':2,'剑圣':1,...} 第3轮: { '苏亚雷斯':1,'卡尔':2,'贝利':1,...} ... 统计出前N轮,每场比赛都有进球的球员 .   --N个字典中,寻找公共键的问题 -- 比较容易想到的方法: 我们的方法: 解决方案:   利用集合(set)的交集操作 ---获

机器学习算法:补一个k-近邻算法的测试

之前写k-近邻算法(http://boytnt.blog.51cto.com/966121/1569629)的时候,没附上测试数据,这回找了一个,测试一下算法的效果.数据来源于http://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data,关于乳腺癌的样本,属性描述见breast-cancer-wisconsin.names. 样本的大致形式

MySQL索引背后的数据结构及算法原理 --转

写在前面的话 在编程领域有一句人尽皆知的法则“程序 = 数据结构 + 算法”,我个人是不太赞同这句话(因为我觉得程序不仅仅是数据结构加算法),但是在日常的学习和工作中我确认深深感受到数据结构和算法的重要性,很多东西,如果你愿意稍稍往深处挖一点,那么扑面而来的一定是各种数据结构和算法知识.例如几乎每个程序员都要打交道的数据库,如果仅仅是用来存个数据.建建表.建建索引.做做增删改查,那么也许觉得数据结构和这东西没什么关系.不过要是哪天心血来潮,想知道的多一点,想研究一下如何优化数据库,那么一定避免不

面试常考数据结构与算法

数据结构部分: 1.数组和链表的区别.(很简单,但是很常考,记得要回答全面) C++语言中可以用数组处理一组数据类型相同的数据,但不允许动态定义数组的大小,即在使用数组之前必须确定数组的大小.而在实际应用中,用户使用数组之前无法确定数组的大小,只能够将数组定义成足够大小,这样数组的空间可能不被使用,从而造成内存空间的浪费.链表是一种常见的数据组织形式,他采用动态分配内存的形式实现.需要时可以用new分配内存空间,不需要时用delete将已分配的空间释放,不会造成内存空间的浪费. 从逻辑结构上来看

javascript数据结构和算法 零(前记+序言)

前记 这本书Data Structure and Algorithm with Javascript 我将其翻译成<< javascript 数据结构和算法>> 为什么这么翻译?而不是翻译成"用javascript实现数据结构和算法" 原因有二: 一个,我觉的它更加简洁,第二个,我是想强调我们在这里使用的是javascript. 我不喜欢一些翻译的人把一个简单的语句进行加工,搞得晦涩难懂.我更喜欢外国人写书的 那种原汁原味.同样,我很喜欢外国人的那种分享精神,它

Java数据结构和算法(一):简介

本系列博客我们将学习数据结构和算法,为什么要学习数据结构和算法,这里我举个简单的例子. 编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱.一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数据结构和算法的人也能编程.但是如果一个开车的人懂变速箱的原理,比如降低速度来获得更大的牵引力,或者通过降低牵引力来获得更快的行驶速度.那么爬坡时使用1档,便可以获得更大的牵引力:下坡时便使用低档限制车的行驶速度.回到编程而言,比如将一个班级的学生名字要临时存储在内存中,你会选择什么数据结构来存储,数

JavaScript数据结构和算法

前言 在过去的几年中,得益于Node.js的兴起,JavaScript越来越广泛地用于服务器端编程.鉴于JavaScript语言已经走出了浏览器,程序员发现他们需要更多传统语言(比如C++和Java)提供的工具.这些工具包括传统的数据结构(如链表,栈,队列,图等),也包括传统的排序和查找算法.本文主要是总结什么情况下使用何种数据结构较好,并没有细讲里面的原理和实现方式,仅仅提供给阅读过<数据结构和算法>的同学作为总结和参考笔记,如果未细究过数据结构和算法的同学,本文也可以作为一个方向,希望能引