第十五届蓝桥杯模拟赛(第二期)第5题(Python)

这篇具有很好参考价值的文章主要介绍了第十五届蓝桥杯模拟赛(第二期)第5题(Python)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最难的才有挑战性,才值得学习!

小蓝有一个01矩阵。他打算将第一行第一列的 0 变为 2 。变化过程有传染性,每次 2 的上下左右四个相邻的位置中的 0 都会变成 2 。直到最后每个 2 的周围都是 1 或 2 结束。 请问,最终矩阵中有多少个 2 ? 以下是小蓝的矩阵,共 30 行 40 列。 0000100010000001101010101001001100000011 0101111001111101110111100000101010011111 1000010000011101010110000000001011010100 0110101010110000000101100100000101001001 0000011010100000111111001101100010101001 0110000110000000110100000000010010100011 0100110010000110000000100010000101110000 0010011010100110001111001101100110100010 1111000111101000001110010001001011101101 0011110100011000000001101001101110100001 0000000101011000010011111001010011011100 0000100000011001000100101000111011101100 0010110000001000001010100011000010100011 0110110000100011011010011010001101011011 0000100100000001010000101100000000000010 0011001000001000000010011001100101000110 1110101000011000000100011001001100111010 0000100100111000001101001000001010010001 0100010010000110100001100000110111110101 1000001001100010011001111101011001110001 0000000010100101000000111100110010101101 0010110101001100000100000010000010110011 0000011101001001000111011000100111010100 0010001100100000011000101011000000010101 1001111010010110011010101110000000101110 0110011101000010100001000101001001100010 1101000000010010011001000100110010000101 1001100010100010000100000101111111111100 1001011010101100001000000011000110110000 0011000100011000010111101000101110110001

def spread_twos(matrix):
    rows = len(matrix)
    cols = len(matrix[0])
    
    def propagate(r, c):
        if matrix[r][c] == 0:
            matrix[r][c] = 2
            if r > 0: propagate(r - 1, c)
            if r < rows - 1: propagate(r + 1, c)
            if c > 0: propagate(r, c - 1)
            if c < cols - 1: propagate(r, c + 1)
    
    propagate(0, 0)
    
    return sum(row.count(2) for row in matrix)

matrix = [
    [int(char) for char in line]
    for line in [
        "0000100010000001101010101001001100000011",
        "0101111001111101110111100000101010011111",
        "1000010000011101010110000000001011010100",
        "0110101010110000000101100100000101001001",
        "0000011010100000111111001101100010101001",
        "0110000110000000110100000000010010100011",
        "0100110010000110000000100010000101110000",
        "0010011010100110001111001101100110100010",
        "1111000111101000001110010001001011101101",
        "0011110100011000000001101001101110100001",
        "0000000101011000010011111001010011011100",
        "0000100000011001000100101000111011101100",
        "0010110000001000001010100011000010100011",
        "0110110000100011011010011010001101011011",
        "0000100100000001010000101100000000000010",
        "0011001000001000000010011001100101000110",
        "1110101000011000000100011001001100111010",
        "0000100100111000001101001000001010010001",
        "0100010010000110100001100000110111110101",
        "1000001001100010011001111101011001110001",
        "0000000010100101000000111100110010101101",
        "0010110101001100000100000010000010110011",
        "0000011101001001000111011000100111010100",
        "0010001100100000011000101011000000010101",
        "1001111010010110011010101110000000101110",
        "0110011101000010100001000101001001100010",
        "1101000000010010011001000100110010000101",
        "1001100010100010000100000101111111111100",
        "1001011010101100001000000011000110110000",
        "0011000100011000010111101000101110110001"
    ]
]

number_of_twos = spread_twos(matrix)

print(f"最终矩阵中有 {number_of_twos} 个2。")
  1. 深度优先搜索 (dfs)函数

    • 从指定的位置开始,标记当前单元格为2,并递归搜索相邻的单元格,将连接的零区域也标记为2。
    • 递归的停止条件是当越界或者当前单元格不为0时停止。
  2. 计算连通区域数量 (count_twos)函数

    • 从第一行和第一列开始,对值为0的单元格调用 dfs 函数,标记与其连通的零区域为2。
    • 然后统计整个矩阵中值为2的单元格的数量,即为连通的零区域数量。
  3. 数据处理

    • 提供了一个包含大量 0 和 1 的字符串数据,代表了初始矩阵。
    • 将这些数据转换为二维列表,然后传递给 count_twos 函数。

总体来说,这段代码通过深度优先搜索算法在二维矩阵中查找连通的零区域,并统计这些区域的数量。

难度系数:5星。

答案:541。文章来源地址https://www.toymoban.com/news/detail-756241.html

到了这里,关于第十五届蓝桥杯模拟赛(第二期)第5题(Python)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第十五届蓝桥杯模拟赛(第一期)Python

    创作不易,欢迎小伙伴们关注、点赞+收藏! 问题描述 请找到一个大于 2022 的最小数,这个数转换成十六进制之后,所有的数位(不含前导 0)都为字母(A 到 F)。 请将这个数的十进制形式作为答案提交。 答案提交 这是一道结果填空的题,你只需要算出结果后提交即可。本

    2024年02月05日
    浏览(34)
  • 第十五届蓝桥杯模拟赛(第一期)

    大家好,我是晴天学长,本次分享,制作不易,需要的小伙伴可以点赞关注评论一波哦!后续会继续更新第二期第三期的。💪💪💪 问题描述 请找到一个大于 2022 的最小数,这个数转换成十六进制之后,所有的数位(不含前导 0)都为字母(A 到 F)。 请将这个数的十进制形

    2024年02月04日
    浏览(36)
  • 第十五届蓝桥杯模拟赛(第一期 C++)

    问题描述 请找到一个大于 2022 的最小数,这个数转换成十六进制之后,所有的数位(不含前导 0)都为字母(A 到 F)。请将这个数的十进制形式作为答案提交。    答案: 2730 思路分析: 直接暴力秒了 问题描述 在 Excel 中,列的名称使用英文字母的组合。前 26 列用一个字母

    2024年02月05日
    浏览(26)
  • 【蓝桥杯Web】第十五届蓝桥杯(Web 应用开发)模拟赛 2 期 | 全部题解

    感觉蓝桥杯的模拟赛一次比一次难了😑 制作不易,代码都是纯手敲,觉得有帮助的伙伴们记得点个赞评论一下,谢谢大家支持😍 话不多说直接上答案 目录 1、想不相等 2、三行情书 3、电影院在线订票 4、老虎机 5、星际通讯 6、蓝桥杯排位赛 7、拼出一个未来 8、超能英雄联

    2024年02月05日
    浏览(31)
  • 【蓝桥杯 第十五届模拟赛 Java B组】训练题(A - I)

     目录 A、求全是字母的最小十六进制数 B、Excel表格组合 C、求满足条件的日期 D、 取数字 - 二分 (1)暴力 (2)二分 E、最大连通块 - bfs F、哪一天? G、信号覆盖 - bfs (1)bfs(60%) (2)暴力 H、清理水域 - 暴力(弱智版) 可以差分 I、滑行 - dfs + dp (1)dfs(30%) (2)

    2024年02月05日
    浏览(25)
  • 第十五届蓝桥杯(Web 应用开发)模拟赛 2 期-大学组(详细分析解答)

    目录  1.相不相等 1.1 题目要求 1.2 题目分析 1.3 源代码 2.三行情书 2.1 题目要求 2.2 题目分析 2.3 源代码 3.电影院在线订票 3.1 题目要求 3.2 题目分析 3.3 源代码  4.老虎坤(不然违规发不出来) 4.1 题目要求 4.2 题目分析 4.3 源代码 5.星际通讯 5.1 题目要求 5.2 题目分析 5.3 源代码

    2024年02月05日
    浏览(22)
  • 2023第十四届蓝桥杯模拟赛第二期个人题解(Java实现)

    2023第十四届蓝桥杯校内模拟赛第三期个人题解(Java实现) 蓝桥杯真题——单词分析(Java实现) 这篇文章为个人题解,假如我写的解法有误,欢迎大家在评论区指正👏👏!!!希望这篇文章对你有帮助❤❤ 请找到一个大于 2022 的最小数,这个数转换成二进制之后,最低的

    2023年04月23日
    浏览(23)
  • 2022 第十四届蓝桥杯模拟赛第二期题目题解(比赛时使用方法)

    目录 第一题:最小的2022 第二题:经过天数 第三题:特殊的十六进制数 第四题:矩阵的最小路径 第五题:质数拆分 第六题:拷贝时间 第七题:单词去重 第八题:最短回文串 第九题:多少个X? 第十题:最小交换 问题描述 请找到一个大于 2022 的最小数,这个数转换成二进

    2023年04月11日
    浏览(36)
  • 【蓝桥杯Web】大一小白参与蓝桥杯模拟赛二期web组体会

    目录 前言 一、相关比赛介绍 1.ACM国际大学生程序设计竞赛 2.蓝桥杯 3.GPLT团队程序设计天梯赛 4.leetcode周赛和双周赛 5.PAT 二、蓝桥杯 1.应该参加蓝桥杯吗? 2.如何进行蓝桥杯的准备 三.蓝桥杯模拟赛二期web组真题 1.凭空消失的TA(简单) 2.用户名片(简单) 3.芝麻开门(中等)

    2023年04月08日
    浏览(27)
  • 第十四届蓝桥杯模拟赛(第一期)——C语言版

    问题描述 十进制整数 2 在十进制中是 1 位数,在二进制中对应 10 ,是 2 位数。 十进制整数 22 在十进制中是 2 位数,在二进制中对应 10110 ,是 5 位数。 请问十进制整数 2022 在二进制中是几位数? 答案提交 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果

    2023年04月09日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包