抖音热门游戏Fill one-line puzzle game解法的Python代码实现

2023-10-27

版权声明:原创文章,转载请注明出处

导语

最近刷抖音的时候,发现经常有人提问一个游戏的解法,于是去下载了这款游戏,发现还挺好玩的。
在这里插入图片描述

这个游戏的玩法也很简单,就是一笔画成。比如像这样

在这里插入图片描述

我以为这个游戏很火,其实AppStore的下载量才寥寥几千。趁它还没有完全火起来,用Python写了一个小程序,可以列出这个游戏的解法。

思路

五个字,运用回溯法。
用两个List:
(1)List1是二维的,模拟整个表格,1代表起点,0代表原始的可以经过的点,-1代表原始的不能通过的点,比如本图
在这里插入图片描述
其List应该是这样的
在这里插入图片描述
如果移动到某一个点,则该点的值等于已经走过的步数,以记录移动路径。
(2)List2是三维的,用以记录每个点已经尝试了的路径,比如List2[1][1][2]=1,表示第一行第一列这个点已经尝试了向下(1代表上,2代表下,3代表左,4代表右),可避免重复。

从起点开始移动,按上下左右的方向去尝试,如果移动到某一个点,无法再移动了,就判断是否到达了终点,如果没有到达终点,则清空该点的记录信息(路径记录和已经尝试的路径记录),并往回退一步。循环该操作直到走到终点。

代码

import numpy as np
#初始化
Row=int(input('请输入行数:'))
Col=int(input('请输入列数:'))
list_path=np.zeros((Row,Col),dtype=int) #路径记录
list_pathrecord=np.zeros((Row,Col,4),dtype=int) #已尝试路径记录
cord=input("请输入起点坐标,以','隔开:")
list_path[int(cord[0])-1][int(cord[2])-1]=1
i_initial=int(cord[0])-1 #记录起点坐标
j_initial=int(cord[2])-1
i_tmp=int(cord[0])-1 #起点坐标
j_tmp=int(cord[2])-1
while 1:
    cord=input("请输入空白点坐标,以','隔开,如果已输入完毕请按回车:")
    if cord!='':
        list_path[int(cord[0])-1][int(cord[2])-1]=-1
    else:
        break
steps=np.sum(list_path==0)+1 #所需步数,加上起点
stepcount=1 #步数记录

def MoveTest(i,j,mType): #坐标和移动方式,判断是否可移动
    flag=False
    if mType==1: #向上
        if i!=0 and list_path[i-1][j]==0 and list_pathrecord[i][j][0]==0:
            flag=True
    elif mType==2: #向下
        if i!=Row-1 and list_path[i+1][j]==0 and list_pathrecord[i][j][1]==0:
            flag=True
    elif mType==3: #向左
        if j!=0 and list_path[i][j-1]==0 and list_pathrecord[i][j][2]==0:
            flag=True
    elif mType==4: #向右
        if j!=Col-1 and list_path[i][j+1]==0 and list_pathrecord[i][j][3]==0:
            flag=True
    return flag

def ReturnTest(i,j): #判断是否回头
    flag=True
    for s in range(1,5):
        if MoveTest(i,j,s):
            flag=False
            break
    return flag

def Move():
    global i_tmp
    global j_tmp
    global stepcount
    if ReturnTest(i_tmp,j_tmp) and stepcount!=steps: #需要回头并且未达到终点
        if i_tmp==i_initial and j_tmp==j_initial:  #判断是否无解
            print('无解!')
            stepcount=steps #跳出循环
        else:
            for s in range(4):
                list_pathrecord[i_tmp][j_tmp][s]=0 #清空该坐标已尝试路径记录
            list_path[i_tmp][j_tmp]=0 #清空该坐标路径记录
            for m in range(Row): #查找上一步坐标
                p=0 #跳出循环判断
                for n in range(Col):
                    if list_path[m][n]==stepcount-1:
                        i_tmp=m
                        j_tmp=n
                        p=1
                        break
                if p==1:
                    break
            stepcount-=1 #步数减1
    elif stepcount==steps: #达到终点
        pass
    else:
        for x in range(1,5):
            if MoveTest(i_tmp,j_tmp,x):
                list_pathrecord[i_tmp][j_tmp][x-1]=1 #记录已尝试路径
                if x==1: #移动一步
                    i_tmp-=1
                elif x==2:
                    i_tmp+=1
                elif x==3:
                    j_tmp-=1
                elif x==4:
                    j_tmp+=1
                stepcount+=1 #步数加1
                list_path[i_tmp][j_tmp]=stepcount #记录路径
                break
        
while stepcount!=steps:
    Move()

print(list_path)

验证

运行的结果如下
在这里插入图片描述
验证解法确实成功了
在这里插入图片描述

谢谢小李同学的提醒,加上了无解的判断,不然如果无解就进入死循环了!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

抖音热门游戏Fill one-line puzzle game解法的Python代码实现 的相关文章

  • Python OverflowError:数学范围错误[重复]

    这个问题在这里已经有答案了 当我尝试这个计算时 出现溢出错误 output math exp 1391 12694245 100 我知道发生这种情况是因为使用的数字 超出了双精度数的范围 但有什么方法可以解决这个问题并获得输出值 有人可以帮
  • Keras model.summary() 结果 - 了解参数数量

    我有一个简单的神经网络模型 用于使用 Keras Theano 后端 从用 python 编写的 28x28px 图像中检测手写数字 model0 Sequential number of epochs to train for nb ep
  • 使用 glGetFloatv 检索 pyglet 中的模型视图矩阵

    我正在使用 pyglet 在 python 中进行 3D 可视化 并且需要检索模型视图和投影矩阵来进行一些选择 我使用以下方式定义我的窗口 from pyglet gl import from pyglet window import wi
  • 如何在python 2.7.8中将非英文字母的字典写入文件?

    这是一个简单的例子 test location 北京 country 中国 the values are Chinese 在文件 test log 中 location 北京 country 中国 在python 2 7 8中 当我需要输出
  • TCP打孔问题

    我尝试使用 Python 3 中概述的原则为防火墙编写一个基本的 TCP 打孔器本文 http www bford info pub net p2pnat index html 不过 我无法连接任何东西 这是代码 usr bin pytho
  • Python实时读取串口数据

    我正在使用 Python 中的脚本通过串行端口以 2Mbps 的速度从 PIC 微控制器收集数据 PIC 在 2Mbps 下完美定时工作 FTDI USB 串行端口在 2Mbps 下工作也很好 均通过示波器验证 我每秒发送消息 大小约为 1
  • Tensorflow 训练期间 GPU 使用率非常低

    我正在尝试为 10 类图像分类任务训练一个简单的多层感知器 这是 Udacity 深度学习课程作业的一部分 更准确地说 任务是对各种字体呈现的字母进行分类 数据集称为 notMNIST 我最终得到的代码看起来相当简单 但无论如何我在训练期间
  • Python 中嵌套列表的排序和分组

    我有以下数据结构 列表的列表 4 21 1 14 2008 10 24 15 42 58 3 22 4 2somename 2008 10 24 15 22 03 5 21 3 19 2008 10 24 15 45 45 6 21 1 1
  • 如何使用appium自动化Android手机后退按钮

    我正在使用 Appium python 客户端库 对 Android 上的混合移动应用程序进行测试自动化 我无法找到任何方法来自动化或创建手势以使用 电话后退 按钮返回到应用程序的上一页 有没有可以使用的驱动函数 我尝试了 self dri
  • 是否可以在 Jupyter 笔记本中显示控制台?

    我希望能够使用 Jupyter 笔记本中的控制台在环境中进行摆弄 添加额外的单元格意味着我总是必须滚动到最底部或在我想要 类似控制台 文本字段的任何地方创建新单元格 是否可以有一个永久的控制台窗口 例如在窗口底部 Thanks 您可以启动连
  • 自适应支付 API 错误 580001

    我正在 python 中向 paypal 自适应支付 API 发出 PAY 请求 并收到通用错误 id 580001 没有其他信息 headers API credentials for the API caller business ac
  • 使用 matplotlib 设置或固定二元分布值

    I ve animated a bivariate gaussian distribution using matplotlib 我已经计算过这个distribution通过调整COV matrix来考虑特定的变量 我可以提供有关此过程的更
  • 如何打印和显示子进程 stdout 和 stderr 输出而不失真?

    也许有人可以帮助我解决这个问题 我在 SO 上看到了许多与此类似的问题 但没有一个问题同时处理标准输出和标准错误 也没有处理像我这样的情况 因此出现了这个新问题 我有一个 python 函数 它打开一个子进程 等待它完成 然后输出返回代码以
  • 如何向 RetrievalQA.from_chain_type 添加内存?或者,如何向 ConversationalRetrievalChain 添加自定义提示?

    如何向 RetrievalQA from chain type 添加内存 或者 如何向 ConversationalRetrievalChain 添加自定义提示 在过去的两周里 我一直在尝试制作一个可以通过文档聊天的聊天机器人 因此不仅仅是
  • CryptoJS 和 Pycrypto 一起工作

    我正在使用 CryptoJS v 2 3 加密 Web 应用程序中的字符串 并且需要在服务器上使用 Python 对其进行解密 因此我使用 PyCrypto 我觉得我错过了一些东西 因为我无法让它工作 这是JS Crypto AES enc
  • 在 Python 中伪造一个对象是否是类的实例

    假设我有一堂课FakePerson它模仿基类的所有属性和功能RealPerson 不扩展它 在Python 3中 是否可以伪造isinstance 为了认识到FakePerson as a RealPerson只通过修改对象FakePers
  • python 相当于 sed

    有没有一种方法 无需双循环即可完成以下 sed 命令的操作 Input Time Banana spinach turkey sed i Banana s Toothpaste file Output Time BananaToothpas
  • float() 参数必须是字符串或数字,而不是“时间戳”

    我无法使 scilearn 与日期时间系列一起工作 找到了这篇文章 但对我没有帮助 Pandas 类型错误 float 参数必须是字符串或数字 https stackoverflow com questions 41256626 panda
  • 将同一 numpy 数组的两个视图组合成单个视图而不复制数组?

    我有一个大型 2d numpy 数组 我想删除它的子集并处理函数剩下的内容 我需要对许多子集执行此操作 因此理想情况下我不想每次都创建数组的副本 该函数不会更改数组中的任何值 mat np load filename mat 1 mat i
  • 真实值与预测值的降维可视化

    我有一个数据框 如下所示 label predicted F1 F2 F3 F40 major minor 2 1 4 major major 1 0 10 minor patch 4 3 23 major patch 2 1 11 min

随机推荐

  • iic通信原理_血氧饱和度传感器MAX30102模块的原理及编程

    一 简介 MAX30102是一个集成的脉搏血氧仪和心率监测仪生物传感器的模块 芯片 它集成了一个660nm红光LED 880nm红外光LED 光电检测器 光器件 以及带环境光抑制的低噪声电子电路 可通过软件关断模块 待机电流为零 实现电源始
  • OpenCV Mat类型及convertTo转换

    类型 在 Android OpenCv中给我们返回的 type 直接是 CV 8UC4 但是 在 C 中返回的是 16 等这些整型 所以 我找了个对照表 表头的 C1 C2 C3 C4 指的是通道 Channel 数 比如灰度图像只有 1
  • 获取当前访问的部分虚拟路径(Request.Url.GetLeftPart)

    Request Url GetLeftPart的应用 发送按钮
  • 2023牛寒2--Tokitsukaze and K-Sequence

    Tokitsukaze 有一个长度为 n 的序列 a 她想把这个序列划分成 k 个非空子序列 定义序列的值为这个序列中只出现一次的数字的个数 对于 k 1 n Tokitsukaze 想知道把序列 a 划分成 k 个非空子序列后 所有子序列
  • GCD->OC

    VHAsyncRun h VHAsyncRun h VHUpload Created by vhall on 2019 11 7 Copyright 2019 vhall All rights reserved typedef void V
  • 20230601

    20230703 mockito when 不生效 掘金 Java 单元测试 3 mock进阶 静态 final 私有方法mock 掘金 Mockito与PowerMock的使用基础教程 掘金 System out println Syst
  • Linux--数据链路层--ARP协议--0319-21

    目录 1 认识以太网 1 1 以太网帧格式 1 2 基于以太网帧简单模拟局域网通信 问题一 如果有多台主机都在发送数据呢 问题二 发送方知不知道自己的数据被影响了呢 1 3 MTU 1 3 1 MTU对IP协议的影响 1 3 2 MTU对U
  • C++之关联容器的erase使用

    对于关联容器 如map set multimap multiset 删除当前的iterator 仅仅会使当前的iterator失效 只要在erase时 递增当前的iterator即可 这是因为map之类的容器 使用了红黑树来实现 插入 删除
  • 软件工程提问回顾与个人总结

    项目 内容 作业所属课程 软件工程班级博客 作业要求请点击链接查看 作业要求 我在这个课程的目标 学习如何用工程化方法构建和维护软件 这个作业在哪个具体方面帮助我实现目标 通过回顾整个课程的学习 思考总结获得的收获 一 以前提问题的博客 提
  • Qt知识点梳理 —— 无边框图片背景窗体实现

    文章目录 实现效果 创建项目 项目源码 开发环境 实现效果 创建项目 首先创建项目 选择QMainWindow或者QWidget都可以 窗体中加入Layout 选择Vertical Layout或者Horizontal Layout都可以
  • Microsoft Office Word 2016关闭时无响应卡顿的解决方法

    1 在控制面板中找到Microsoft office 2 右键单击选择更改 3 尝试 Quick Rapair 4 等待修复 如果Quick Rapair修复完成还没有解决问题 选择Online repair 再尝试
  • Python入门第五天——[小甲鱼]零基础入门学习Python

    046 property方法的原理 property方法的原理 描述符 描述符就是将某种特殊类型的类的实例指派给另一个类的属性 MyDecriptor就是x的描述符 所以MyDecriptor类就是一个描述符类 通常带有get set和de
  • 关于Vue.config.devtools与Vue.config.productionTip

    1 关于Vue config devtools 1 类型 boolean 2 默认值 true 生产版为 false 3 用法 务必在加载 Vue 之后 立即同步设置以下内容 一般在main js中 Vue config devtools
  • IO之字符流

    1 字符输出流 public abstract class Writer extends Object implement Appendable Closeabel Flushable 写入字符流的抽象类 子类必须实现的方法仅有write
  • jittor框架

    sudo apt install python dev sudo pip install https github com Jittor jittor git python3 m jittor test test example http
  • 概率算法与代码

    一 随机数 随机数在概率算法设计中扮演着十分重要的角色 在现实计算机上无法产生真正的随机数 因此在概率算法中使用的随机数都是一定程度上随机的 即伪随机数 线性同余法是产生伪随机数的最常用的方法 由线性同余法产生的随机序列a0 a1 an满足
  • es实战-rebalance功能及源码解析

    rebalance tasks在es集群里面的表现形式 通过调用 GET cat tasks v API 返回结果中 action 为 internal index shard recovery start recovery 不仅仅是reb
  • C#中Dispose、析构函数、close的区别

    C 中Dispose 析构函数 close的区别 一 Close与Dispose这两种方法的区别 调用完了对象的Close方法后 此对象有可能被重新进行使用 而Dispose方法来说 此对象所占有的资源需要被标记为无用了 也就是此对象要被销
  • c程序设计(第四版)、p102例4.6(查询成绩等级)

    谭浩强 c程序设计 第四版 p102例4 6 include
  • 抖音热门游戏Fill one-line puzzle game解法的Python代码实现

    抖音热门游戏Fill one line puzzle game解法的Python代码实现 导语 思路 代码 验证 谢谢小李同学的提醒 加上了无解的判断 不然如果无解就进入死循环了 版权声明 原创文章 转载请注明出处 导语 最近刷抖音的时候