蓝桥杯-长草

news2024/12/28 5:09:56

没有白走的路,每一步都算数🎈🎈🎈

题目描述:

已知一个长度为n,宽度为m的长方形草地,但不是每一个方格里面都长满了草,只有部分的方格张了些草。并且每个月草会向上下左右都繁殖一个草,并且满足在边界范围内。即若衍生的草不在边界范围内的,就不会生长。试求第k个月之后,这块方形地的生长情况是怎么样的?

输入描述:

第一行:

输入两个数据,n,m分别表示长方形地区的长度和宽度

第二行及其n行:

每行m个数据,表示第n行的长草情况,其中该块地若长草,我们用g表示,否则用.表示。

最后一行,输入k表示,这块地生长了多少个月

输出描述:

输出k个月之后,这块土地的草地情况

样例输入输出:

样例输入: 

4 5

.g...

.....

..g..

.....

样例输出:

gggg.

gggg.

ggggg

.ggg.

算法分析:

显然这是一道BFS的题目。此次用时4个多小时,写出了超时的代码,部分样例没有通过。

数据结构定义:

  • mp数组:表示杂草地,g表示杂草,.表示空地
  • d数组:表示递归桥梁的数组
  • a数组:存放第一次BFS位置,即输入数据中g的位置

代码设计:

  • 最开始的分割字符,map(str,input())非常适合用于分割很多连在一起的数据 ps:这里卡住一段时间
  • bfs函数,这里卡住最长时间,当初bfs()函数传参的时候,没有把k写入进去,出现bug。导致,对样例的k=2时,出现有部分杂草没有繁殖。遂改成三个参数的情况。
  • 逻辑有点小错误

         这里不应该写成if mp[ni][nj]=='.':,直接删除即可,因为这样会误导至有些杂草也不会繁殖。

  • 最后就是解决超时问题。
#长草
import os
import sys
n,m = map(int,input().split())
mp = [list(map(str,input()))for i in range(n)]
k = int(input())
d = [[0,1],[0,-1],[1,0],[-1,0]]
a = []

def bfs(i,j,k):
    if k<=0:
        return 
    for x in range(4):
        ni,nj = i+d[x][0],j+d[x][1]
        if 0<=ni<=n-1 and 0<=nj<=m-1:
            mp[ni][nj] = 'g'
            bfs(ni,nj,k-1)

for i in range(n):
    for j in range(m):
        if mp[i][j] =='g':
            a.append([i,j])
for x in a:
    bfs(x[0],x[1],k)

for i in range(n):
    for j in range(m):
        print(mp[i][j],end = '')
    print()

改进版BFS:

数据结构:

  • 导入deque包,BFS几乎都会用到这个,以及常用popleft方法
from collections import deque
n,m = map(int,input().split())
mp = [list(map(str,input()))for i in range(n)]
##print(mp)
k = int(input())
q = deque()
for i in range(n):
    for j in range(m):
        if mp[i][j] == 'g':
            q.append((i,j,k))

##print(q)
while True:
    x,y,z = q.popleft()
    if z==0:
        for i in range(n):
            print(''.join(mp[i]))
        break
    for i,j in [[1,0],[-1,0],[0,1],[0,-1]]:
        nx,ny = x+i,y+j
        if 0<=nx<n and 0<=ny<m and mp[nx][ny]=='.':
            mp[nx][ny]='g'
            q.append((nx,ny,z-1))

每日一句

摘自《《晚熟的人》》:

本性善良的人都晚熟,并且是被劣人催熟的。后来虽然开窍了,但也仍然善良与赤诚,不断地寻找同类,最后却成了最孤独的一个。

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

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

相关文章

Linux中MMU内存管理【进阶学习】

前言 现代操作系统普遍采用虚拟内存管理&#xff08;Virtual Memory Management&#xff09;机制&#xff0c;这需要处理器中的MMU&#xff08;Memory Management Unit&#xff0c;内存管理单元&#xff09;提供支持。 MMU&#xff08;Memory Management Unit) &#xff1a;内…

微信小程序023安全科普之家在线考试错题集

开发语言&#xff1a;Java 小程序前端框架&#xff1a;uniapp 小程序运行软件&#xff1a;微信开发者 后端技术:Ssm(SpringSpringMVCMyBatis)vue.js 后端开发环境:idea/eclipse 数据库:mysql 本系统设计的是一个“科普之家”知识在线考试小程序的网站&#xff0c;此网站使用户实…

计算机网络基础知识点

计算机网络基础知识点计算机网络1、概述1.1 计算机网络基本概念1.2 互联网核心部分:数据交换1.3 计算机网络的性能指标1.4 计算机网络体系结构2、物理层2.1 物理层基本概念2.2 数据通信系统模型2.3 数据编码技术2.4 信道复用技术3、数据链路层3.1 概述3.2 PPP协议3.3 CSMA/CD3.…

Python垃圾回收机制——完美讲解

Garbage collection(GC) 现在的高级语言如java&#xff0c;c#等&#xff0c;都采用了垃圾收集机制&#xff0c;而不再是c&#xff0c;c里用户自己管理维护内存的方式。自己管理内存极其自由&#xff0c;可以任意申请内存&#xff0c;但如同一把双刃剑&#xff0c;为大量内存泄…

小程序用ts时点击事件e的类型

今天检查代码的时候发现&#xff0c;小伙伴用ts写的文件里面&#xff0c;点击事件的e都是用any&#xff0c;这明显不对。所以趁着有空&#xff0c;去百度去翻阅资料解决这个问题。 小程序的官方社区下面直接给了答案&#xff0c;如下图&#xff1a; 嗯&#xff0c;是的&#x…

看ChatGPT这形势,留给我们开发人员的时间不多了

程序员一直所做的工作是什么&#xff1f;恐怕想到最后&#xff0c;每个努力的程序员都是在让自己努力的走向失业。最近ChatGPT爆火&#xff0c;他能做什么&#xff1f;能写文章&#xff0c;写的很好&#xff0c;可以代替你发邮件&#xff0c;一直到发现OpenAI的深度加持&#x…

微信小程序 Springboot+vue+nodejs学科竞赛比赛报名管理系统

目 录 摘 要 III Abstract 4 1 系统概述 5 1.1 概述 5 1.2课题意义 5 1.3 主要内容 5 2 系统开发环境 6 2.1微信开发者工具 6 2.2小程序框架以及目录结构介绍 6 2.3 JAVA简介 7 2.4 MySQL数据库 7 3 需求分析 1 3.1 系统设计目标 1 …

实战案例 Python批量识别银行卡号码并且写入Excel,初学者也可以轻松使用~

大家好&#xff0c;这里是恶霸 今天我们继续学习Python自动化办公&#xff1a;每次有新员工入职&#xff0c;都要收集大量的工资卡信息&#xff0c;并且生成Excel文档&#xff0c;能不能用Python准确、快速地解决呢&#xff1f; 今天我们就来学习一下&#xff0c;如何用1行代…

【07】FreeRTOS的列表和列表项

目录 1.列表和列表项的简介 1.1列表结构体成员-介绍 1.2列表项结构层成员-介绍 1.3迷你列表项 1.4列表和列表项的关系 2.列表相关API函数介绍 2.1列表初始化函数vListInitialise() 2.2列表项初始化函数vListInitialiseItem() 2.3列表项插入函数vListInsert() 2.4末尾…

微服务配置中心, 这个方案 Go 里用起来不输SpringCloud

微服务架构设计模式里有一条讲到&#xff0c;要设计可配置的服务。把服务从单体架构细分成微服务后&#xff0c;所有配置属性都集中存储在一个位置&#xff0c;更易于管理。这个集中存储管理配置的地方叫&#xff0c;就是配置中心。 使用配置中心还有一个好处就是&#xff0c;…

java基础面试题 一

一、面向对象五大基本原则是什么 1.单一职责原则SRP(Single Responsibility Principle) 类的功能要单一&#xff0c;不能包罗万象&#xff0c;跟杂货铺似的。 2.开放封闭原则OCP(Open&#xff0d;Close Principle) 一个模块对于扩展是开放的&#xff0c;对于修改是封闭的 …

Jenkins基于docker cloud动态增减节点

jenkins可以按照jenkins容器启动去部署 Jenkins管理动态节点 动态节点可以在有job运行时&#xff0c;临时加入一个agent到jenkins master&#xff0c;然后等job执行完毕之后&#xff0c;所加入的agent再自动删除掉&#xff0c;达到一个动态的增删节点效果&#xff0c;使所有的…

引用第三方插件到分包中即如何把uni_modules文件夹中的插件放入分包中

网上搜索了很多&#xff0c;但都没有直接说明如何把node_modules中的第三方插件如何引入到分包中&#xff0c;首先为什么要在分包引入&#xff0c;原因就是小程序有包大小的限制&#xff0c;不能超过2M&#xff0c;超过2M的话&#xff0c;则不能发布或预览&#xff0c;于是不能…

SCT81620QSTER,升降压电源芯片

P2P替代 LM3478和LM3481SCT81620QSTER设备是一个宽输入、非同步升压控制器。该设备可用于增强、间隔和反馈转换器和拓扑结构。SCT81620Q设备的开关频率可以通过将SCT81620Q设备的开关频率调整到100 kHz到2.2MHz之间的任何值。电流模式控制提供了优越的带宽和瞬态响应&#xff0…

IDEA设置注释模板(详细版)

IDEA设置注释模板 类注释模板方法注释模板效果展示 1. 类注释模板 类注释模板是IDEA创建类时生成的注释 第一步、File -> Settings 第二步、Editor -> File and Code Templates -> Includes -> File Header 点apply&#xff0c;再点ok即可 模板参考如下&#…

拉格朗日插值原理及其Julia实现

文章目录数学原理算法化测试设函数yf(x)yf(x)yf(x)在区间[a,b][a,b][a,b]上有定义&#xff0c;且在点a⩽x0⩽x1…⩽xn⩽ba\leqslant x_0\leqslant x_1\ldots\leqslant x_n\leqslant ba⩽x0​⩽x1​…⩽xn​⩽b上的值y0,y1…yny_0, y_1 \ldots y_ny0​,y1​…yn​之间存在一个函…

规则引擎-drools-3.2-drl文件构成-rule部分-属性Attribute

文章目录drl文件构成-rule部分rule示例rule nameAttribute全部属性说明no-loop 和 lock-on-activeactivation-group 和 agenda-groupdrl文件构成-rule部分 drl文件构成&#xff0c;位于官网的第5章位置&#xff0c;也是drools作为规则引擎应用的最核心部分。 其中rule模块&…

谷歌浏览器无法翻译此网页,解决方法?(谷歌浏览器无法翻译成中文,谷歌翻译,最新方法)

谷歌浏览器自带的翻译功能,对我们来说用处很大,但有的时候突然就会变成“无法翻译此网页”,针对此问题这里提供几种解决方案(翻译插件),如下: 方法1: 蓝奏云文件https://wwot.lanzouw.com/iFc7d0hmrtpg 访问密码:slee 方法2: 脚本之家

分布式事务的4种模式

分布式事务理论基础 解决分布式事务&#xff0c;也有相应的规范和协议。分布式事务相关的协议有2PC、3PC。 由于三阶段提交协议3PC非常难实现&#xff0c;目前市面主流的分布式事务解决方案都是2PC协议。 有些文章分析2PC时&#xff0c;几乎都会用TCC两阶段的例子&#xff0…

Java开发基础入门之Java基础中的Stack类及其常用方法

一、Stack类 1.Stack是Vector的一个子类&#xff0c;它实现标准的后进先出堆栈。Stack只定义了创建空堆栈的默认构造方法。 Stack() 2.Stack类里面主要实现的有以下的几个方法&#xff1a; (1)boolean empty( )方法是判断堆栈是否为空。 (2)Object peek( )方法是返回栈顶端…