Python:每日一题之剪邮票(BFS全排列)

news2024/9/21 20:44:35

如【图1.jpg】, 有12张连在一起的12生肖的邮票。

现在你要从中剪下 5 张来,要求必须是连着的。

(仅仅连接一个角不算相连) 比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。

请你计算,一共有多少种不同的剪取方法。

思考:

思路:暴力求全排列+检查连通性。
        (1)用递归暴力列出所有可能的排列:从12个数中选5个数进行全排列。
        (2)判断这5个数是否连通。
算法复杂度:12*11*10*9*8=121/7=95040
可行!
判断2个数是否连通
小技巧:
        ·在原图中向上为-4,向下为+4,向左为-1,向右为+1,但是遇到34578这种4+1=5,这种情况不符合,所以重构一下原图。
        ·向上为-5,向下为+5,向左为-1,向右为+1。

判断图中的{2,3,4,8,9}是否连通。用队列:
        •2进队列:当前队列是(2);
        •2的邻居进(push)队列:当前队列是(2 3);
        •弹出(pop)2:当前队列是(3);
        •3的邻居进队列:当前队列是(348);
        •弹出3;当前队列是(48)
        •4的邻居进队列:当前队列是(489)
        •弹出4:当前队列是(89)
        •8没有没处理过的邻居了。·弹出8:当前队列是(9)·弹出9;
        •队列空。
如果5个数都进过队列,它们就是连通的。 

参考代码:

from queue import *
def bfs():    #a[0]~a[4]这前5个数是递归出的5个数,用BFS判断是否连通
  vis=[0]*5   #用来标记5个数的状态,判断其中某个数是否已经用队列处理过
  p=0    #进队列的个数,如果5个数都进过队列,说明这五个数连通
  q=Queue()  #创建队列
  q.put(0)   #进队列
  vis[0]=1   #标记,表示 0 被队列处理过了
  while not q.empty(): #是否为空
    i=q.get()  #得到队列的第一个数
    p+=1
    for j in range(5):  
      if vis[j]==0:   #j 没有用队列处理过
        for k in (-1,1,-5,5):  #k 是上下左右四个方向
          if a[i]+k==a[j]:  #与 j 在 k 方向上连接
            q.put(j)
            vis[j]=1   #进队列了
  if p==5:
    return True
  else:
    return False

def perm(s,t):
  global num
  if s==5:   #得到一个 5 个数的全排列,用bfs判断 5 个数是否连通
    if bfs()==True:
      num+=1
  else:
    for i in range(s,t+1):
      a[s],a[i]=a[i],a[s] #交换
      perm(s+1,t)
      a[i],a[s]=a[s],a[i]

a=[1,2,3,4,6,7,8,9,11,12,13,14]
num=0    #统计排列数
perm(0,11)   #求从第 0 个数到第 11 个数的全排列
print(num//120)
#print(116) 最终答案

排列转化为组合num//5x4x3x2x1,分母是选的某几个数,5个数就是5的阶乘,4个数就是4个数的阶乘

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/351949.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

redis的安装步骤及前台,后台redis服务启动

redis的安装步骤1. 官网下载安装包2. 使用Xftp将安装包传输到Linux的opt目录下3. 使用Xshell连接Linux主机进行redis的安装安装目录说明4. redis 服务启动的两种方式4.1 前台启动4.2 后台启动1. 官网下载安装包 首先,我们进入到redis的官网: https://redis.io/down…

代码随想录算法训练营第三十一天 | 贪心专题-理论基础,455.分发饼干,376. 摆动序列,53. 最大子序和

一、参考资料理论基础https://programmercarl.com/%E8%B4%AA%E5%BF%83%E7%AE%97%E6%B3%95%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 分发饼干https://programmercarl.com/0455.%E5%88%86%E5%8F%91%E9%A5%BC%E5%B9%B2.html 摆动序列https://programmercarl.com/0376.%E6%91%86…

数据库存储

RAID DSL : Domain Spesic Language 专用领域语言 单机存储 一切皆Key-Value 本地文件系统 一切皆文件 Ceph - 分布式存储 关系型数据库通用组件 Query Engine :解析query,生成查询计划Txn Manager :事务并发管理Lock Man…

知识汇总:Python办公自动化应该学习哪些内容

当前python自动化越来越受到欢迎,python一度成为了加班族的福音。还有大部分人想利用python自动化来简化工作,不知道从何处下手,所以,这里整理了一下python自动化过程中的各种办公场景以及需要用到的python知识点。 Excel办公自动…

【C++】类和对象(第二篇)

文章目录1. 类的6个默认成员函数2. 构造函数2.1 构造函数的引出2.2 构造函数的特性3. 析构函数3.1 析构函数的引出3.2 析构函数的特性4. 拷贝构造函数4.1 概念4.2 特性5.赋值运算符重载5.1 运算符重载概念注意练习5.2 赋值重载实现赋值重载的特性6. const成员函数7. 取地址及co…

传统图机器学习的特征工程

视频资料同济子豪兄中文精讲视频:节点特征工程:https://www.bilibili.com/video/BV1HK411175s连接特征工程:https://www.bilibili.com/video/BV1r3411m7sD全图特征工程:https://www.bilibili.com/video/BV14W4y1V7gg斯坦福原版视频…

spring的事物控制

1.调用这个方法的对象是否是spring的代理对象($CGLIB结尾的) 2.这个方法是否是加了Transactional注释 都符合才可以被事物控制 如果调用方法的对象没有被事物控制,那么被调用的方法即便是加了Transactional也是没用的 一个非事务方法调同类…

13.hadoop系列之MapReduce排序实践

本文我们学习MapReduce的全排序、二次排序以及区内排序 1.MapReduce概述 MapTask和ReduceTask均会对数据按照key进行排序。该操作属于hadoop的默认行为。任何应用程序中的数据均会被排序,而不管逻辑上是否需要默认排序是按照字典顺序排序,通过快速排序…

【蓝桥杯嵌入式】第十三届蓝桥杯嵌入式国赛程序设计试题以及详细题解

文章目录原题展示原题分析详细题解LED模块按键模块串口LCD模块模拟电压读取(ADC)脉冲输入输出文章福利原题展示 原题分析 本届国赛试题主要包含LCD、LED、按键、EEPROM、串口、模拟电压输入、脉冲输入输出七大部分,其中前面三个部分是蓝桥杯嵌入式的“亲儿子”(必考…

SpringBoot 集成 Kafka

SpringBoot 集成 Kafka1 安装 Kafka2 创建 Topic3 Java 创建 Topic4 SpringBoot 项目4.1 pom.xml4.2 application.yml4.3 KafkaApplication.java4.4 CustomizePartitioner.java4.5 KafkaInitialConfig.java4.6 SendMessageController.java5 测试1 安装 Kafka Docker 安装 Kafk…

数据库原理及应用期末复习汇总(附某高校期末真题试卷)

文章目录《数据库原理及应用》试题1一、选择题(共35分)二、填空(每空1分,共20分)三、T-SQL综合题(共35分)四、综合应用题(共10分)《数据库原理及应用》试题2一、选择题(共35分)二、填空&#xf…

handler解析(5)常见面试题

目录 1.请大致讲下handler的工作原理 2.handler.postDelay原理 3.一个线程有几个Looper?几个Handler? 4. Handler内存泄漏原因?以及解决方案 5.为何主线程可以new Handler如果想要在子线程中new Handler要做些什么准备? 6.消息退出是调…

R语言广义可加模型在空气环境污染方面的应用(1)

粉丝私信我希望复制一篇文章的图片,图片来源于文章:Wu C, Yan Y, Chen X, Gong J, Guo Y, Zhao Y, Yang N, Dai J, Zhang F, Xiang H. Short-term exposure to ambient air pollution and type 2 diabetes mortality: A population-based time series st…

中频采样和IQ采样的比较和转换

一、什么是中频采样,什么是IQ采样 射频接收系统通常使用数字信号处理算法进行信号解调和分析,因此需要使用ADC对信号进行采样。根据采样频率的不同,可以分为射频直接采样、中频采样、IQ采样。射频采样和中频采样只需要一路ADC,采…

搜索引擎ES相关问题

一、什么是倒排索引?有什么好处?索引: 从ID到内容。倒排索引: 从内容到ID。好处: 比较适合做关键字检索。 可以控制数据的总量。提高查询效率。搜索引擎为什么比MySQL查询快? lucence文章 -》 term ->排…

element-ui中el-table点击其他自定义按钮展开table中某一行

element-ui中el-table点击其他自定义按钮展开table中某一行 在日常开发中,我们遇见了会有点击某些按钮,使得表格行展开的需求,这时候去查看文档 element-ui(table) 这里官方提供了示例为在行最左侧有一个展开合并ico…

JAVA开发测试(jmeter如何测试性能与估算)

对C的业务网站或应用,进行性能测试来评估使用服务器情况是必不可少的一项工作。 一、测试工具: Apache JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能,是Apache组织开发的…

CCF-CSP真题《202212-1 现值计算》思路+python满分题解

想查看其他题的真题及题解的同学可以前往查看:CCF-CSP真题附题解大全 试题编号:202212-1试题名称:现值计算时间限制:1.0s内存限制:512.0MB问题描述: 问题描述 评估一个长期项目的投资收益,资金的…

中点BH算法对任意斜率的直线扫描转换方法

作者:非妃是公主 专栏:《计算机图形学》 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录专栏推荐专栏系列文章序一、算法原理二、…

六“元”数智增长模型,企业元宇宙时代的经营新范式

摘要:在中国传统哲学里,“元”表示最基本的、最根本的东西;在企业管理经营中,将“元”解释为企业的核心竞争力或者基础能力;元宇宙下,“元”就代表数智化下的新场景,来支撑企业的各种业务创新。 一、元宇宙下的“元” …