精讲连连看制作方法

2024-04-04 15:18

本文主要是介绍精讲连连看制作方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

程序的关键在于判断用户连续点击的两个图案能否消除。两个图片可以消除的条件有两个:
  • 图片相同
  • 图片间连线的转角数不得超过2 。

  而判断能否通过小于两个转角的路径连通的算法有两种:

  • 分类判断法
  • 以转角数为标准的广度优先搜索

 

  下面对两种算法分别讨论。

 

  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个转角的路径相连的算法
bool Match( Picture A,Picture B )
{
    Set< picture > S ; //已经搜索到的点的集合,集合S中每个元素与A都可以通过不多于个转角的路径连通
     Set< picture > T ; //临时存储搜索到的点
     将A加入到S中
 
    int crossNum = 0 ; //用于记录当前搜索到节点的最大转角数
 
    While( B 不在S 中&& crossNum < 3 )
    {
        for ( S 中每个元素e )
        {
             将所有与e能直线连通的点加入到集合T中
        }
         T中的所有元素加入到S中
        crossNum ++ ;
    }
    if ( B 在S中)
        return true ;
    else
        return false ;
}

     实际编程实现这一算法时可以采取优化措施,不一定要搜索出所有与A转角不超过2的点。

   本程序实现时采用了第一种算法。

这篇关于精讲连连看制作方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/876125

相关文章

iOS CAShapeLayer精讲

CAShapeLayer继承自CALayer,因此,可使用CALayer的所有属性。但是,CAShapeLayer需要和贝塞尔曲线配合使用才有意义。 关于UIBezierPath,请阅读文章iOS UIBezierPth精讲 基本知识 看看官方说明: /* The shape layer draws a cubic Bezier spline in its coordinate

文本怎么在线做成二维码?文字信息生成活码的制作方法

文本怎么做成二维码来展示呢?现在通过二维码分享信息的方式越来越常见,可以将文本二维码应用于许多的用途,比如人员信息、物品信息、通知内容、企业介绍等内容都可以生成二维码来展示。那么文本生成二维码该怎么生成呢?下面教大家使用生成二维码工具的方法,通过简单的几步操作就可以快速在线制作二维码。 当需要将大量的文本做成二维码展示,可以用二维码生成器的功能来实现,只需要简单的3步操作就能够完成二维码制作,一

怎么能快速把视频转二维码?视频二维码在线的制作方法

二维码现在经常会用来展示内容,这样展示内容会更加的简单快捷,能够让许多人同时扫码获取内容,有利于内容的快速传播,所以将视频、图片、文件、文本等内容生成二维码来提供展示,在日常生活中应用场景不断增多。 那么在遇到二维码制作需求时该怎么来操作呢?下面给大家分享视频二维码制作的方法,能够将本地视频生成二维码来通过扫码展示内容,实现视频的快速分享,有需要的小伙伴可以按下面的步骤来制作。 打开机智熊二维

每日一题,零基础入门FPGA——工程师在线精讲,直播预告

题目传送门:F学社 zzfpga.com/StudentPlatform/Sheet/QuestionBankhttp://zzfpga.com/StudentPlatform/Sheet/QuestionBank 【第Ⅰ期题目 * 5】 请使用D触发器和必要的逻辑门实现此同步时序电路,用Verilog语言描述。 【第Ⅰ期题目 * 4】 请设计一个0-9的十进制计数器,要求带同步

【精讲】PCIe基础篇——Non-Prefetchable Prefetchable MMIO

MMIO 有两种, Non-Prefetchable MMIO:非预取内存空间 Prefetchable MMIO :可预取内存空间 Prefetchable MMIO:将MMIO的一个区域设置为可预取的,允许CPU提前获取该区域中的数据,以预测请求者在不久的将来可能需要比实际请求更多的数据。对数据进行这种小规模缓存是安全的,因为读取数据不会改变目标设备上的任何状态信息。也就是说,

【精讲】PCIe基础篇——Memory IO 地址空间

在早期的PC中,IO设备中的内部寄存器/存储是通过IO地址空间(由Intel定义)来访问的。然而,由于与IO地址空间相关的一些限制和不良影响(我们在这里不讨论),IO地址空间很快就失去了软件和硬件供应商的青睐。这导致IO设备的内部寄存器/存储被映射到内存地址空间(通常称为Memory mapped IO,或MMIO)。然而,由于早期的软件是使用IC地址空间来访问IO设备上的内部寄存

【精讲】PCIe基础篇——BAR(Base Address Register)详解

一、为什么需要BAR         系统中的每个设备中,对地址空间的大小和访问方式可能有不同的需求,例如,一个设备可能有256字节的内部寄存器/存储,应该可以通过IO地址空间访问,而另一个设备可能有16KB的内部寄存器/存储,应该可以通过基于MMIO的设备访问。哪些地址应该使用哪种方式(IO或Memory)来访问它们的内部位置,这是系统软件(即BIOS和OS内核)的工作。因此设备必须为系统软件

支付宝调用批量转账接口而生成二维码(异地收款)的制作方法

调用支付宝批量转账接口的制作不揍如下: 1、获取需要接受转账方的支付宝手机号或者邮箱 2、使用支付宝提供的批量付款API 如下是具体代码: import requestsimport json# 支付宝网关地址gateway_url = 'https://openapi.alipay.com/gateway.do'# 应用IDapp_id = '你的AppID'# 商户私钥priv

算法工程师第五十一天(dijkstra(堆优化版)精讲 Bellman_ford 算法精讲)

参考文献 代码随想录 一、参加科学大会 题目描述 小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。 小明的起点是第一个车站,终点是最后一个车站。然而,途中的各个车站之间的道路状况、交通拥堵程度以及可能的自然因素(如天气变化)等不同,这些因素都会影响每条路径的通行时间。 小明希望能选择一条花费时间最少的路线,以确保他能够尽快到达目的地。 输入描述 第一行包

学习笔记(02):全新 PowerDesigner 16.6 数据库设计与建模(精讲版)-索引

立即学习:https://edu.csdn.net/course/play/24751/280492?utm_source=blogtoedu 索引 1.组合索引 2.唯一索引 3.聚簇索引 4.非聚簇索引