京东笔试编程题之消消乐

这是一个关于京东笔试中的编程题目,涉及5*5网格上的数字匹配与消除。当格子与其相邻数字相同且连通数达到3或以上时,可以消除。消除后,因重力作用,上方格子会下落填补空位。文章提供了问题的详细描述及解决方案的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:有一个5*5的正方形网格,没个格子中有一个大于0且小于4的整数,对于一个确定的局面,若一个格子与它上下左右四个方向的某个格子(如果存在)数字相同,则称这两个格子是连通的,并且这种连通具有传递性。
每次,可以选择一个格子,若与这个格子连通的格子(包括自己)数大于等于3,你就可以选择消掉这个格子,与此同时,与这个格子连通的所有格子会一起消失。
如果仅仅是这样,那就太简单了,因为无论如何消除,最后的结果都是一样的,所以我们引入重力系统,每次选择消掉某个格子,并将与那个格子相连通的所有格子都消掉后将会有一些格子失去支撑,此时那些格子就会因重力而下落。
在这里插入图片描述
实现代码如下:

#广度优先搜索,队列实现
def findSame(arr, book, i, j, queue, front, rear, count):
    #保证当前点不为0
    if arr[i][j] == 0:
        return
    
    #当前节点入队
    queue.append([i, j])
    rear[0] = rear[0] + 1
    
    #队列不为空时
    while(front[0] != rear[0]):
        #先出队
        i, j = queue[front[0]]
        front[0] = front[0] + 1
        
        #标记当前正在访问的点
        book[i][j] = 1
        
        #相同的点数量增加
        count[0] = count[0] + 1
        
        #上右下左查找与当前位置相同的项,注意,顺序必须是上右下左
        if (i-1 >= 0) and (arr[i][j] == arr[i-1][j]) and (book[i-1][j] == 0): 
            #如果(i,j
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值