斜向三消查找算法的原理和实现

简介: 嗨!大家好,我是小蚂蚁。之前的文章中我们讲了三消查找算法的原理和实现,通常的三消指的是水平和竖直方向上的消除。现在我们想要做点儿新花样,想在斜方向也可以消除,那斜向的三消查找算法如何实现呢?今天就来讲一下。斜方向分为两种,一种是从左下方向右上方倾斜,我们把它叫做“向右斜”,一种是从右下方向左上方倾斜,我们把它叫做“向左斜”。对于斜方向的查找,就是沿着两个方向查找,即“向右斜查找”和“向左斜查找”。

嗨!大家好,我是小蚂蚁。

之前的文章中我们讲了三消查找算法的原理和实现,通常的三消指的是水平和竖直方向上的消除。现在我们想要做点儿新花样,想在斜方向也可以消除,那斜向的三消查找算法如何实现呢?今天就来讲一下。

斜向查找的原理

如图,黑线画出来的红色宝石满足斜方向上的三消条件,所以这些红色宝石能够消除。

斜方向分为两种,一种是从左下方向右上方倾斜,我们把它叫做“向右斜”,一种是从右下方向左上方倾斜,我们把它叫做“向左斜”。对于斜方向的查找,就是沿着两个方向查找,即“向右斜查找”和“向左斜查找”。

首先,仍然是进行一下数据抽象,构建一个由数字组成的表格,这个表格是后续的判断和计算的基础。

整个斜向查找过程是这样的:

从第一行第一列的宝石开始。

先进行“右斜”查找,检查右上方的宝石是否与自己相同,如果相同就记录下来,然后继续向右上方检查,直到右上方的宝石与自己不同为止。查找完成后,统计找到的相同的宝石数量,如果大于等于 3 个,则记录这些宝石满足消除条件。

再进行“左斜”查找,检查左上方的宝石是否与自己相同,如果相同就记录下来,然后继续向左上方检查,直到左上方的宝石与自己不同为止。查找完成后,统计找到的相同的宝石数量,如果大于等于 3 个,则记录这些宝石满足消除条件。

接着检查第一行第二列的宝石。

......

直到所有的宝石检查完毕为止。

来看一下第一行第一列宝石的整个查找过程。

接着将剩下的每个宝石都进行一次斜方向的查找,所有的宝石都查找完毕后,整个查找过程就结束了。

如图,“向右斜”的查找用蓝线表示,“向左斜”的查找用绿线表示。其实,在这整个查找遍历的过程中,并不需要将表格中的每个宝石都进行一遍斜向的查找,例如在对第 1 行 1 列的宝石进行查找的过程中,已经找到了与它相同的第 2 行 2 列的,以及第 3 行 3 列的宝石。所以这两个宝石在遍历查找的过程中,就不需要再次进行检查了。

可以借助一个列表来记录那些已经检查过的,不需要再次检查的宝石。在检查之前可以先检查一下列表,如果这个宝石已经在里面了,就无需再次检查了。这样可以提升整个遍历检查的效率,即使计算机很擅长计算,我们也不要让它去做重复的无意义工作。

至于怎么找到右上方或者左上方的宝石呢?其实非常的简单,已知当前宝石的行列号,那么它右上方的宝石就是(行号+1,列号+1),左上方的宝石就是(行号+1,列号-1)。

以上就是斜向查找的理论基础了,要比水平竖直的三消查找简单很多。

斜向查找的实现

接着,来看一下在微信小游戏制作工具中的实现方式,其它游戏引擎的实现方式原理类似。

看一下斜向查找的积木逻辑。

右斜查找的函数,其中只包含一个斜方向查找的迭代函数。

接着来看一下两个一模一样的迭代函数。

除了名字不一样,所有的积木都一样。关于如何在微信小游戏制作工具中实现递归函数,可以参考【这篇教程】。

以上就是斜向三消查找的原理和实现了,你会发现其实它跟水平竖直的三消查找都大同小异,只要理解透彻一个,其它就能够信手拈来。

这些原理往往都是一些看似很难,但是实际上并不难的东西。这里分享一点儿我自己的学习技巧,有些东西,尤其是之前从未接触过的,乍一看,完全看不懂。这时的第一反应往往是抗拒,头脑里会蹦出一个小人,不停的说:不要弄了,这个太难了,你学不会,看都看不懂,怎么学呢?

此时,我就会不停的告诉自己:看不懂很正常,那就多看几遍,使劲看,早晚能够看的懂。现实往往也是这个样子,每多看一遍似乎就能够多懂一点点,当看的遍数足够多了,这个东西就变的不再难了。另外,除了看,动手也很重要,我习惯于在纸上画,这能够帮助我更好的理顺思路,更好的理解问题。

其实不大部分学不会的东西,并不是因为它太难了,而是因为我们太懒了。

要么就一次搞明白,要么就遇到一次头疼一次。

我是会做游戏也会教你做游戏的小蚂蚁,想学习做游戏的话,关注我的公众号就对啦!

自己学习没氛围学不下去?遇到问题无人解答?缺少经验不知该如何前行?......欢迎加入小蚂蚁的游戏开发课,不只是一门课,而是围绕着新手学习做游戏有关的一整套服务。致力于帮助更多的人学会做游戏并做出自己的游戏,欢迎来跟一百多位同学一起学习做游戏。【点击这里】了解课程服务详情,全新升级,上新特价,最后两天。

这里是小蚂蚁的小游戏系列,闲暇之余希望能给你带来片刻的放松和愉悦。无需下载安装,点击下方的游戏卡片就可以直接玩啦!










也欢迎加个微信,交个朋友,朋友圈每日分享与做游戏有关的知识和内容,可以来围观。备注“学习做游戏”可免费领取学习做游戏的原创教程资料。接受付费咨询,不闲聊,望见谅。

相关文章
|
2月前
|
数据采集 机器学习/深度学习 算法
|
21天前
|
机器学习/深度学习 算法 Python
群智能算法:深入解读人工水母算法:原理、实现与应用
近年来,受自然界生物行为启发的优化算法备受关注。人工水母算法(AJSA)模拟水母在海洋中寻找食物的行为,是一种新颖的优化技术。本文详细解读其原理及实现步骤,并提供代码示例,帮助读者理解这一算法。在多模态、非线性优化问题中,AJSA表现出色,具有广泛应用前景。
|
2月前
|
前端开发 算法 JavaScript
React原理之Diff算法
【8月更文挑战第24天】
|
2月前
|
机器学习/深度学习 算法 搜索推荐
【机器学习】机器学习的基本概念、算法的工作原理、实际应用案例
机器学习是人工智能的一个分支,它使计算机能够在没有明确编程的情况下从数据中学习并改进其性能。机器学习的目标是让计算机自动学习模式和规律,从而能够对未知数据做出预测或决策。
56 2
|
2月前
|
机器学习/深度学习 算法 数据可视化
决策树算法介绍:原理与案例实现
决策树算法介绍:原理与案例实现
|
2月前
|
算法
PID算法原理分析及优化
今天为大家介绍一下经典控制算法之一的PID控制方法。PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。 在大学期间,参加的智能汽车竞赛中就使用到了PID经典控制算法,对于智能小车的调试更加的方便。 一、PID原理 PID控制方法将偏差的比例(proportional)、积分(integral)、微分(derivative)通过线性组合构成控制量,对被控对象进行控制。 常规的PID控制系统如图所示: 系统的输入r(t)为控制量的目标输出值,输出y(t)为控制量的实际输出值,e(t)为输出量目标值与实际值
48 1
|
2月前
|
机器学习/深度学习 运维 算法
深入探索机器学习中的支持向量机(SVM)算法:原理、应用与Python代码示例全面解析
【8月更文挑战第6天】在机器学习领域,支持向量机(SVM)犹如璀璨明珠。它是一种强大的监督学习算法,在分类、回归及异常检测中表现出色。SVM通过在高维空间寻找最大间隔超平面来分隔不同类别的数据,提升模型泛化能力。为处理非线性问题,引入了核函数将数据映射到高维空间。SVM在文本分类、图像识别等多个领域有广泛应用,展现出高度灵活性和适应性。
95 2
|
2月前
|
存储 负载均衡 监控
自适应负载均衡算法原理和实现
自适应负载均衡算法原理和实现
|
2月前
|
算法 安全 网络安全
Diffie-Hellman (DH) 算法的工作原理
【8月更文挑战第23天】
117 0
|
2月前
|
数据采集 搜索推荐 算法
【高手进阶】Java排序算法:从零到精通——揭秘冒泡、快速、归并排序的原理与实战应用,让你的代码效率飙升!
【8月更文挑战第21天】Java排序算法是编程基础的重要部分,在算法设计与分析及实际开发中不可或缺。本文介绍内部排序算法,包括简单的冒泡排序及其逐步优化至高效的快速排序和稳定的归并排序,并提供了每种算法的Java实现示例。此外,还探讨了排序算法在电子商务、搜索引擎和数据分析等领域的广泛应用,帮助读者更好地理解和应用这些算法。
24 0
下一篇
无影云桌面