【华为OD机试真题】【2024年E卷】数值同化-队列BFS(C++/Java/Python)

news2024/12/22 12:31:09

文章目录

      • 分值:200
      • 题目描述
      • 思路
      • 复杂度分析
      • AC 代码

分值:200

题目描述

存在一个 m * n 的 二维数组只,其成员取值范围为0, 1, 2。其中值为1的元素具备同化特性,每经过1S,将上下左右值为0的元素同化为1。而值为2的元素,免疫同化。
将数组所有成员随机初始化只为02,再将矩阵的[0,0]元素修改成1,在经过足够长的时间后,求矩阵中有多少个元素是02(即02数量之和)。
输入描述:
输入的前两个数字是矩阵大小nm
接着输入nm列,表示矩阵信息。
输出描述:
返回矩阵中非 1的元素个数。

示例1
输入:
4 4
0 0 0 0
0 2 0 0
0 0 2 0
0 0 0 2
输出:
3
解释:
除了矩阵中 3 个值为2的元素,其他元素全部同化为1了。

示例2
输入:
4 4
0 2 0 0
0 2 0 0
0 2 0 0
0 2 0 0
输出:
12
解释:
只有第一列被同化为1了,第2、3、4列没有被同化,因为第二列全是值为2的元素,阻挡住同化了。

Tips:

  • 0 < m, n <= 30

思路

  • 将上下左右值为0的元素同化为1 这点可以联系到BFS,这是一道很经典的宽度优先搜索的题目,可以当做模板题进行练习。
  • [0, 0]开始出发,只有值为0的元素才能被同化,所以只将1周围的 0 元素放进队列,直到队列为空即可。
  • 答案要求返回矩阵中非 1的元素个数。可以在遍历的同时进行计算,每当有一个元素被同化,那么ans就减一。

复杂度分析

  • 时间复杂度: O ( n ∗ m ) O(n*m) O(nm),其中NM分别为矩阵的行长跟列长,每个位置只需要访问一次。
  • 空间复杂度: O ( n ∗ m ) O(n*m) O(nm),其中NM分别为矩阵的行长跟列长,用于存储矩阵信息。

AC 代码

C++ 版

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n, m, ans, dis[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
    cin >> n >> m;
    vector<vector<int>> mx(n, vector<int>(m));
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cin >> mx[i][j];
        }
    }
    mx[0][0] = 1;
    // 一开始 0 跟 2 的个数之和, 后面每次有同化的就 -1 即可
    ans = n * m - 1;
    queue<pair<int, int>> q;
    q.push({0, 0});
    while (!q.empty())
    {
        auto t = q.front();
        q.pop();
        for (int i = 0; i < 4; i++)
        {
            int x = t.first + dis[i][0], y = t.second + dis[i][1];
            if (x >= 0 && x < n && y >= 0 && y < m && mx[x][y] == 0)
            {
                mx[x][y] = 1;
                ans--;
                q.push({x, y});
            }
        }
    }
    cout << ans << endl;
    return 0;
}

JAVA 版

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int ans;
        int[][] dis = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};

        int[][] mx = new int[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                mx[i][j] = scanner.nextInt();
            }
        }

        mx[0][0] = 1;
        ans = n * m - 1;
        Queue<int[]> q = new LinkedList<>();
        q.add(new int[]{0, 0});

        while (!q.isEmpty()) {
            int[] t = q.poll();
            for (int i = 0; i < 4; i++) {
                int x = t[0] + dis[i][0];
                int y = t[1] + dis[i][1];
                if (x >= 0 && x < n && y >= 0 && y < m && mx[x][y] == 0) {
                    mx[x][y] = 1;
                    ans--;
                    q.add(new int[]{x, y});
                }
            }
        }

        System.out.println(ans);
    }
}

Python 版

from collections import deque

n, m = map(int, input().split())
ans = 0
dis = [[-1, 0], [1, 0], [0, -1], [0, 1]]

mx = []
for _ in range(n):
    mx.append(list(map(int, input().split())))

mx[0][0] = 1
ans = n * m - 1
q = deque([(0, 0)])

while q:
    t = q.popleft()
    for i in range(4):
        x = t[0] + dis[i][0]
        y = t[1] + dis[i][1]
        if 0 <= x < n and 0 <= y < m and mx[x][y] == 0:
            mx[x][y] = 1
            ans -= 1
            q.append((x, y))

print(ans)

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

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

相关文章

QT exe文件设置图标【终极解决方案!】

会报错&#xff1a;makefile error 1 将图片转换成ico文件&#xff0c;不能自己改后缀&#xff01;多试几个转换的网站&#xff0c;下面是我使的转换网站【成功了】 在线转换网址&#xff1a; https://onlineconvertfree.com/zh/convert/jpg/ 将图片放在.pro同级下 .pro和…

JAVA:组合模式(Composite Pattern)的技术指南

1、简述 组合模式(Composite Pattern)是一种结构型设计模式,旨在将对象组合成树形结构以表示“部分-整体”的层次结构。它使客户端对单个对象和组合对象的使用具有一致性。 设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git 2、什么是组合模式 组合模式…

CTFHUB 历年真题 afr-1

发现传参为 ?phello&#xff0c;尝试 ?pflag 发现都是 no 尝试假设它是个PHP文件&#xff0c;利用php伪协议 ?pphp://filter/readconvert.base64-encode/resourceflag 得到 base64 编码再解码发现了本题的 flag n1book{afr_1_solved}

共创共建!葡萄城 SpreadJS 完成 HarmonyOS NEXT 操作系统兼容认证

最新技术资源&#xff08;建议收藏&#xff09; https://www.grapecity.com.cn/resources/ 近日&#xff0c;华为“企业工作必备应用鸿蒙化论坛”在北京圆满落幕&#xff0c;论坛汇聚了众多行业精英和合作伙伴&#xff0c;聚焦讨论企业数字化转型与原生鸿蒙生态融合等话题。葡萄…

Android学习(二)-Kotlin编程语言学习

接上篇文章&#xff0c;我们写如下语法&#xff0c;重新赋值&#xff0c;你会发现报错了&#xff0c;是因为val关键字等同于Java中的final&#xff0c;是无法被改变的&#xff0c;如果想更改数值&#xff0c;换成var即可 函数学习 函数的基本概念 函数是用于封装一段代码的载…

【JavaEE进阶】第一个Spring Boot程序

目录 &#x1f334;安装插件 &#x1f384;Spring Boot介绍 &#x1f333;Spring Boot项目创建 &#x1f6a9;创建Spring Boot项目 &#x1f3c0;jar 包下载不下来问题 &#x1f6a9;启动项目 &#x1f332;目录介绍 &#x1f6a9;src文件 &#x1f6a9;target文件 &…

Oracle 中间件 Webcenter Portal服务器环境搭建

环境信息 服务器基本信息 如下表&#xff0c;本次安装总共使用2台服务器&#xff0c;具体信息如下&#xff1a; Webcenter1服务器 归类 SOA服务器 Ip Address 172.xx.xx.xx.xx HostName wcc01.xxxxxx.com Alias wccprd01 Webcenter2服务器 归类 OSB服务器 Ip Addr…

浅谈文生图Stable Diffusion(SD)相关模型基础

1.U-Net模型基础 1.基础概念 UNet模型是一种基于卷积神经网络的图像分割算法&#xff0c;它采用了U型的网络结构&#xff0c;由编码器&#xff08;下采样路径&#xff09;和解码器&#xff08;上采样路径&#xff09;两部分组成。 编码器负责提取输入图像的特征&#xff0c;…

【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析

目录 一、前言 二、Spring Boot 简介 三、Spring Boot 核心模块 四、Spring Boot 项目实战&#xff1a;构建一个简单的 RESTful API 1. 创建 Spring Boot 项目 2. 配置数据库 3. 创建实体类 4. 创建 JPA 仓库接口 5. 创建服务层 6. 创建控制器层 7. 测试 API 8. 运…

css 动画实现从中间到两边亮度逐渐变暗的流水灯效果

先看效果&#xff1a; 快结束效果 随着离中心点距离逐渐边远&#xff0c;亮度逐渐变暗 完整的视线代码如下&#xff1a; <template><div class"container"><div class"runner bottom to-right"></div><div class"runner …

k8s迁移——岁月云实战笔记

新系统使用rockylinux9.5&#xff0c;旧系统虚拟机装的是centos7 1 目标服务器 1.1 禁止swap swapoff -a vi /etc/fstab #/dev/mapper/rl-swap none swap defaults 0 0 #执行&#xff0c;swap一行都是0 free -h 1.2 关闭防火墙 只是为了减…

Vulnhub靶场Apache解析漏洞

一.apache_parsing 原理&#xff1a;Apache HTTPD ⽀持⼀个⽂件拥有多个后缀&#xff0c;并为不同后缀执⾏不同的指令。在Apache1.x/2.x中Apache 解析⽂件的规则是从右到左开始判断解析,如果后缀名为不可识别⽂件解析,就再往左判断。如 1.php.xxxxx 打开靶场 创建一个名为1.p…

《Java核心技术I》Swing中单选按钮

单选按钮 构造ButtonGroup类型对象。 将JRadioButton对象添加到按钮组中。 new JRadioButton("Small",false)&#xff0c;第二个参数是初始状态。 buttonGroup.getSelection().getActionCommand()获得当前选中的按钮动作命令。 选择字体大小案例 package swing…

在window环境下安装openssl生成钥私、证书和签名,nodejs利用express实现ssl的https访问和测试

在生成我们自己的 SSL 证书之前&#xff0c;让我们创建一个简单的 Express应用程序。 要创建一个新的 Express 项目&#xff0c;让我们创建一个名为node-ssl -server 的目录&#xff0c;用终端cmd中进入node-ssl-server目录。 cd node-ssl-server 然后初始化一个新的 npm 项目…

Webpack学习笔记(5)

1.拆分开发环境和生产环境配置 很多配置在开发环境和生产环境存在不一致的情况&#xff0c;比如开发环境没有必要设置缓存&#xff0c;生产环境需要设置公共路径等等。 2.公共路径 使用publicPath配置项&#xff0c;可以通过它指定应用程序中所有资源的基础路径。 webpack.…

桌面图形界面生成原理:从流水灯到电脑屏幕

桌面图形界面是我们在使用电脑时接触最多的一个部分。它的美观、简洁、易用都给我们的生活带来了极大的便利。但是&#xff0c;你是否想过&#xff0c;这样的界面是如何生成的呢&#xff1f;让我们从流水灯的原理开始&#xff0c;一步步揭开桌面图形界面生成的奥秘。 一、流水…

html+css网页设计 美食 百味美食4个页面

htmlcss网页设计 美食 百味美食4个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#xf…

WPF DataTemplate 数据模板

DataTemplate 顾名思义&#xff0c;数据模板&#xff0c;在 wpf 中使用非常频繁。 它一般用在带有 DataTemplate 依赖属性的控件中&#xff0c;如 ContentControl、集合控件 ListBox、ItemsControl 、TabControls 等。 1. 非集合控件中使用 <UserControl.Resources>&l…

【CSS in Depth 2 精译_084】第 14 章:CSS 蒙版、形状与剪切概述 + 14.1:CSS 滤镜

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 14 章 蒙版、形状与剪切】 ✔️ 14.1 滤镜 ✔️ 14.1.1 滤镜的类型 ✔️14.1.2 背景滤镜 ✔️ 14.2 蒙版 文章目录 第 14 章 蒙版、形状与剪切 Masks, shapes, and…

excel 使用vlook up找出两列中不同的内容

当使用 VLOOKUP 函数时&#xff0c;您可以将其用于比较两列的内容。假设您要比较 A 列和 B 列的内容&#xff0c;并将结果显示在 C 列&#xff0c;您可以在 C1 单元格中输入以下公式&#xff1a; 这个公式将在 B 列中的每个单元格中查找是否存在于 A 列中。如果在 A 列中找不到…