`
isiqi
  • 浏览: 16538814 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

连连看算法

阅读更多
  1. 分类判断法

      这里实质上是一种递归的思想,要判断图片A与图片B能否通过一条有N个转角的路径相连,可以转化为判断能否找到图片C,C与A能直线相连,且C与B能用一条有N-1个转角的路径相连。若这样的图片C存在,那么A与B就可以通过一条有N个转角的路径相连。

      根据转角数不得超过2个的规则,我们可以分为转角数分别为0个、1个、2个这三种情况分别讨论。

  (1)0转角连通(直线连通):两个图片的纵坐标或横坐标相等,且两者连线间没有其他图案阻隔。

  (2)一个转角连通:其实相当于两个图片划出一个矩形,这两个图片是一对对角顶点,另外两个顶点如果可以同时和这两个棋子直连,那就说明可以"一折连通"。见下图两个红色棋子的连通情况,右上角打叉的位置就是折点。

图1.一个转角连通

  (3)两个转角连通: 判断图片A与图片B能否经过有两个转角的路径连通实质上可以转化为判断能否找到一个点C,这个C点与A可以直线连通,且C与B可以通过有两个转角的路径连通。若能找到这样一个C点,那么A与B就可以经过有两个转角的路径连通 。

  判断是否经两个转角连通的算法需要做两个方向上的扫描:水平扫描和垂直扫描。

  水平扫描。如下图所示,为了判断A,B能否通过2个转角连通,则从A开始在水平方向上向左右扫描,并判断经过的点能否与B点经过1个转角连通。显然C点能与B点经1个转角连通,故A,B能经2个转角连通。

图2.两个转角连通的判断

  垂直扫描。如下图所示,为了判断A,B能否通过2个转角连通,则从A开始在垂直方向上下扫描,并判断经过的点能否与B点经过1个转角连通。显然C点能与B点经1个转角连通,故A,B能经2个转角连通。

图3 .两个转角连通的判断

2.以转角数为基准的广度优先搜索法

  这种算法参考《编程之美》。

  这种算法的动机:若能将所有与图片A经过不多于2个转角的路径相连的图片找出来,加入一个集合S中。那么判断B与A能否相连只需判断B是否存在于集合S中即可。采用广度优先搜索算法可以方便的实现这一构想。算法的思路如下:

  (1)定义空集S与T,将A加入集合S

  (2)找出所有与A能直接相连的点,将其加入集合S

  (3)找出与集合S中的点能直接相连的点,加入集合T,然后将T中所有元素加入到集合S中,清空集合T

  (4)找出与集合S中的点能直接相连的点,加入集合T,然后将T中所有元素加入到集合S中

  (5)若B在集合S中,则A,B可以相连。否则A,B不能相连

  模仿图论中广度优先搜索的算法,可以写出以转角为基准的广度优先搜索的伪代码如下:

//判断图片A与图片B能否经过不多于2个转角的路径相连的算法
boolMatch( Picture A,Picture B )
{
Set< picture > S ;//已经搜索到的点的集合,集合S中每个元素与A都可以通过不多于个转角的路径连通
Set< picture > T ;//临时存储搜索到的点
将A加入到S中

intcrossNum = 0 ;//用于记录当前搜索到节点的最大转角数

While( B 不在S 中&& crossNum < 3 )
{
for( S 中每个元素e )
{
将所有与e能直线连通的点加入到集合T中
}
T中的所有元素加入到S中
crossNum ++ ;
}
if( B 在S中)
returntrue;
else
returnfalse;
}

分享到:
评论

相关推荐

    C++实现的连连看算法

    C++实现的连连看算法,一个例子可以明白C++语法和开发 的基础

    连连看算法 连连看算法

    连连看算法 连连看算法是連連看游戏中的一种核心算法,该算法主要解决了游戏中连通两个点的问题。该算法的要求主要有两个:一是要连接的两点上的图形相同,二是两点间存在一条没有障碍的路线,并且折点不超过两个。...

    java版连连看算法

    ### Java版连连看算法解析与实现 #### 一、引言 连连看作为一种经典的消除类游戏,深受广大玩家的喜爱。其核心玩法在于寻找并消除两个相同图案的图标,且这两个图标之间可以画出不多于两条直线连接。Java作为一种...

    Android游戏开发之连连看算法

    根据给定的文件信息,我们可以深入探讨Android游戏开发中连连看算法的核心概念和技术实现细节。连连看游戏是一种经典的消除类游戏,玩家需要在棋盘上找到可以连线的相同图案进行消除。游戏规则简单,但其背后的算法...

    java 连连看算法

    因此,设计一个连连看算法的关键在于找到所有可能的匹配对,并确保它们满足路径条件。 1. **基础概念**: - **棋盘**:连连看的游戏区域,通常是一个二维数组,每个单元格可以包含一个元素。 - **元素**:棋盘上...

    基础入门连连看算法

    在编程实现连连看算法时,我们主要关注以下几个关键知识点: 1. 图形表示与存储: 在连连看游戏中,我们需要用数据结构来表示游戏盘面。一种常见的方式是使用二维数组或矩阵,其中每个元素代表一个图案或者空白...

    连连看算法实现(单线程,无计时模块)

    - **匹配策略**:连连看算法的核心是找到所有可能的匹配对。这通常通过深度优先搜索(DFS)或广度优先搜索(BFS)实现。在这个版本中,我们可能使用DFS,从每个可点击的方块出发,寻找与其相邻且未被消除的相同方块...

    连连看算法与开发的程序

    **连连看算法** 连连看的算法主要分为两步:匹配和消除。 1. **匹配**:首先,我们需要定义一个有效的匹配条件。通常,两个棋子满足以下条件时可以配对: - 图案相同 - 之间没有其他棋子阻隔,即可以通过一条...

    连连看算法相关介绍网摘

    综上所述,连连看算法的核心在于寻找匹配图案之间的有效路径,而最短路径算法则进一步优化了这一过程,确保游戏的流畅性和挑战性。开发者在设计连连看游戏时,需要对这些算法有深入的理解,并结合具体游戏规则进行...

    连连看算法 游戏开发

    我发现原来的那个算法进行了一些不必要的检查, 而且在两点不在同一直线上时只考虑了一种情况(向右扩散), 还有三种(向左,上,下)没有考虑。其实还有一种(Z)型没有考虑,Z型我就没写了, 它采用从左到右或从...

    FLASH连连看算法分析及源代码.docx

    《FLASH连连看算法分析及源代码》 连连看是一款深受玩家喜爱的休闲游戏,其核心在于设计合理的算法以判断两个相同图案是否可以通过直线连接。本文将深入探讨FLASH平台下的连连看算法,并提供源代码示例。 首先,...

    android 连连看算法

    根据提供的信息,我们可以深入探讨“连连看”游戏中的核心算法,并着重分析其在Android平台上的实现方式。连连看是一款非常受欢迎的休闲益智类游戏,玩家的目标是通过连接两个相同图案的方块来消除它们,而连接的...

    连连看+算法

    在这个“连连看+算法”的项目中,我们可以深入探讨连连看游戏的实现原理,特别是其中涉及到的算法。 首先,连连看游戏的基础是二维数组或图形网格来表示游戏板,每个位置上放置一个图案。游戏的核心算法主要包括两...

    Java 连连看 算法 源代码

    在本资源中,我们主要关注的是一个基于Java实现的连连看游戏算法的源代码。连连看,也称为对对碰,是一种广受欢迎的休闲益智游戏,玩家需要找到并消除两个相同图案的方块,直到所有方块都被消除。这个项目由用户...

    连连看核心算法c++版本

    在实现连连看游戏的过程中,算法扮演了至关重要的角色。本篇将深入探讨连连看的核心算法,特别是基于集合形式搜索路径的C++实现。 连连看的核心算法主要包含以下几个关键部分: 1. **游戏地图的表示**:首先,我们...

    flsah连连看算法

    总的来说,连连看算法的设计关键在于如何有效地检查和构建连接路径,既要保证逻辑正确,又要考虑性能优化,尤其是在有限的计算资源和递归深度限制下。逐级算法提供了一种平衡这两方面需求的解决方案,使得在Flash...

    功能较全的连连看,经典算法

    从给定的文件信息来看,我们正在探讨一个Java编写的连连看游戏的实现,其中包含了游戏界面设计、算法逻辑以及游戏控制的关键元素。下面将详细解析这个游戏中涉及的重要知识点。 ### 1. Java Swing GUI编程 游戏...

Global site tag (gtag.js) - Google Analytics