华为OD机试 - 单词搜索,找到它 - 回溯(Java 2024 C卷 100分)

news2024/11/20 12:20:16

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
      • 1、输入
      • 2、输出
      • 3、说明
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

华为OD机试 2024C卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷+C卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

找到它是一个小游戏,你需要在一个矩阵中找到给定的单词。

假设给定单词 HELLOWORD,在矩阵中只要能找到 H->E->L->L->O->W->O->R->L->D连成的单词,就算通过。

注意区分英文字母大小写,并且您只能上下左右行走,不能走回头路。

二、输入描述

输入第 1 行包含两个整数 n、m (0 < n,m < 21) 分别表示 n 行 m 列的矩阵,

第 2 行是长度不超过100的单词 W (在整个矩阵中给定单词 W 只会出现一次),

从第 3 行到第 n+2 行是指包含大小写英文字母的长度为 m 的字符串矩阵。

三、输出描述

如果能在矩阵中连成给定的单词,则输出给定单词首字母在矩阵中的位置(第几行 第几列),

否则输出“NO”。

1、输入

5 5
HELLOWORLD
CPUCY
EKLQH
CHELL
LROWO
DGRBC

2、输出

3 2

3、说明

四、解题思路

单词搜索,上下左右搜索,典型的回溯法搜索。

  1. 定义m 行 n 列的二维矩阵matrix,并初始化;
  2. 遍历矩阵matrix;
    • 如果当前字母等于word首字母,则开始使用回溯法dfs,搜索是否可以组成符合要求的word;
      • 回溯法,寻找符合要求的单词word;
        • dfs参数依次为横坐标i、纵坐标j、当前坐标是否访问过二维数组visited、要找的单词的字母下角标wordIdx;
        • 上下左右搜索;
      • 搜索到可以组成符合要求的word,输出给定单词首字母在矩阵中的位置;
  3. 如果搜索不到符合要求的word,输出“NO”。

五、Java算法源码

public class Test01 {
    // 是否找到了word
    private static boolean findFlag = false;
    // 二维矩阵
    private static char[][] matrix = null;
    // 要找的单词
    private static String word = "";
    // 行
    private static int m = 0;
    // 列
    private static int n = 0;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 分别表示 m 行 n 列的矩阵
        int[] arr = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        m = arr[0];
        n = arr[1];

        word = sc.nextLine();
        // 初始化二位矩阵
        matrix = new char[m][n];
        for (int i = 0; i < m; i++) {
            String str = sc.nextLine();
            for (int j = 0; j < n; j++) {
                matrix[i][j] = str.charAt(j);
            }
        }

        // 当前坐标是否访问过
        boolean[][] visited = new boolean[m][n];
        // 遍历矩阵matrix
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                // 如果当前字母等于word首字母,则开始使用回溯法dfs,搜索是否可以组成符合要求的word
                if (matrix[i][j] == word.charAt(0)) {
                    // 回溯法,寻找符合要求的单词word
                    dfs(i, j, visited, 0);
                    // 搜索到可以组成符合要求的word
                    if (findFlag) {
                        // 输出给定单词首字母在矩阵中的位置
                        StringBuilder builder = new StringBuilder();
                        builder.append(i + 1).append(" ").append(j + 1);
                        System.out.println(builder);
                        return;
                    }
                }
            }
        }

        // 如果搜索不到符合要求的word,输出“NO”。
        System.out.print("NO");
    }

    /**
     * 回溯法
     *
     * @param i       横坐标
     * @param j       纵坐标
     * @param visited 当前坐标是否访问过
     * @param wordIdx 要找的单词的字母下角标
     */
    private static void dfs(int i, int j, boolean[][] visited, int wordIdx) {
        if (i < 0 || i >= m || j < 0 || j >= n || visited[i][j] || matrix[i][j] != word.charAt(wordIdx)) {
            return;
        }

        if (wordIdx == word.length() - 1) {
            findFlag = true;
            return;
        }

        visited[i][j] = true;
        dfs(i, j - 1, visited, wordIdx + 1);// 上
        dfs(i, j + 1, visited, wordIdx + 1);// 下
        dfs(i - 1, j, visited, wordIdx + 1);// 左
        dfs(i + 1, j, visited, wordIdx + 1);// 右
        visited[i][j] = false;
    }
}

六、效果展示

1、输入

6 5
NezhaSoft
qweNz
erNex
yuizp
ddtha
fffoS
astfs

2、输出

1 4

3、说明

在这里插入图片描述


🏆下一篇:华为OD机试 - 最长的顺子 - 感谢@禁止你发言提供的更简便算法(Java 2023 B卷 200分)

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷+C卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

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

相关文章

Tiktok/抖音旋转验证码识别代码

一、引言 在数字世界的飞速发展中&#xff0c;安全防护成为了一个不容忽视的课题。Tiktok/抖音&#xff0c;作为全球最大的短视频平台之一&#xff0c;每天都有数以亿计的用户活跃在其平台上。为了保护用户的账号安全&#xff0c;Tiktok/抖音引入了一种名为“旋转验证码”的安…

比TODESK好用的软件

比ToDesk更好用的软件&#xff1a;探索远程桌面的新选择 在远程桌面控制领域&#xff0c;ToDesk无疑是一款广受欢迎的软件。然而&#xff0c;随着技术的不断进步&#xff0c;市场上涌现出许多新的竞争者&#xff0c;它们在功能、性能和使用体验上都可能超越ToDesk。本文将介绍…

C语言向C++过渡的基础知识(三)

目录 auto类型变量&#xff08;C11标准支持&#xff09; auto关键字介绍 auto关键字的使用 auto关键字基本使用 auto关键字配合指针和引用 auto关键字不可以推导的场景 基于范围的for循环&#xff08;C11标准支持&#xff09; 基于范围的for循环基础使用 基于范围的fo…

语音识别:whisper部署服务器(远程访问,语音实时识别文字)

Whisper是OpenAI于2022年发布的一个开源深度学习模型&#xff0c;专门用于语音识别任务。它能够将音频转换成文字&#xff0c;支持多种语言的识别&#xff0c;包括但不限于英语、中文、西班牙语等。Whisper模型的特点是它在多种不同的音频条件下&#xff08;如不同的背景噪声水…

【Linux杂货铺】进程的基本概念

目录 &#x1f308;前言&#x1f308; &#x1f4c1;进程的概念 &#x1f4c2;描述进程-PCB &#x1f4c2; 查看进程 &#x1f4c2; 查看正在运行的程序 &#x1f4c2;杀死进程 &#x1f4c2;通过系统调用获取进程标识符 &#x1f4c2;通过系统调用创建进程 &#x1f…

HCIA——TCP协议详解

目录 1、TCP概念及协议头部格式 1.1TCP特点 1.2TCP协议协议头部格式 1.3字段进行介绍 1.3.1源端口和目的端口 1.3.2序号(seq) 1.3.3确认序号(ack) 1.3.4数据偏移 1.3.5标志位 1.3.6窗口 1.3.7校验和 1.3.8紧急指针 2、TCP的可靠性 2.1 TCP可靠性的保障 2.2排序机…

论文阅读_参数微调_P-tuning_v2

1 P-Tuning PLAINTEXT 1 2 3 4 5 6 7英文名称: GPT Understands, Too 中文名称: GPT也懂 链接: https://arxiv.org/abs/2103.10385 作者: Xiao Liu, Yanan Zheng, Zhengxiao Du, Ming Ding, Yujie Qian, Zhilin Yang, Jie Tang 机构: 清华大学, 麻省理工学院 日期: 2021-03-18…

unityprotobuf自动生成C#

Release Protocol Buffers v3.19.4 protocolbuffers/protobuf GitHub 导入Source code 里面的 csharp/src/Google.Protobuf 进入Unity 拷贝其他版本的 System.Runtime.CompilerServices.Unsafe进入工程 使用protoc-3.19.4-win32 里面的exe去编译proto文件为C# using Sys…

软件测试相关内容第四弹 -- 测试用例与测试分类

写在前&#xff1a;我们已经掌握了关于软件测试的相关内容&#xff0c;知道了基本的测试过程&#xff0c;在做了一段时间的基础测试&#xff0c;熟悉了相关的业务后&#xff0c;测试人员会进行测试用例的编写&#xff0c;在日常测试中&#xff0c;也需要补充测试用例到现有的案…

HCIP —— 交换 (VLAN)

VLAN --- 虚拟局域网 在 HCIA 中 &#xff0c;已经学过交换机的一些基础配置&#xff0c;下面进行回顾一些简单的内容。 1.创建VLAN VLAN ID --- 区别和标识不同的VLAN 使用范围&#xff1a;0-4095 &#xff0c; 由12位二进制构成。 0 和 4095 作为 保留的VLAN。 …

静默安装OGG21.3微服务版本FOR ORACLE版本

静默安装OGG21.3微服务版本FOR ORACLE版本 silent install ogg21.3 for oracle 某度找来找去都没有找到一份可靠的静默安装OGG21.3微服务版本的案例&#xff0c;特别难受&#xff0c;为此将自己静默安装的步骤一步步贴出来分享给大家&#xff0c;请指点&#xff0c;谢谢。 至…

【生态适配】亚信安慧AntDB数据库与龙芯3C5000L完成兼容互认

日前&#xff0c;亚信安慧AntDB数据库系统V6.2在龙芯3C5000L平台上完成兼容性测试&#xff0c;功能与稳定性良好&#xff0c;被授予龙架构兼容互认证书。 图1&#xff1a;产品兼容性证明 随着“互联网”的纵深发展&#xff0c;数字技术创新成果与经济社会各领域深度融合&#…

电玩体验店怎么计时,佳易王ps5计时计费管理控制系统操作教程

电玩体验店怎么计时&#xff0c;佳易王ps5计时计费管理控制系统操作教程 一、前言 以下软件操作教程以 佳易王电玩计时计费管理系统软件V17.9为例说明 件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、电玩体验馆管理软件在计时的同时可以设置定时提醒&…

Java两周半速成之路(第十六天)

一、网络编程 1.概述&#xff1a; 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换 2.网络模型 3.网络参考模型图 4.网络通信三要素 4.1IP地址 InetAddress类的使用&#xff1a; 注意&#xff1a;通过API查看&#xff0c;此类没有构造方法&#xff0c;如…

Spring Boot Starter: 快速简明地创建Spring应用

Spring Boot Starter是Spring Boot的核心功能之一&#xff0c;它帮助开发人员快速简明地创建、配置和运行Spring应用。在本文中&#xff0c;我们将详细介绍Spring Boot Starter以及如何使用它创建一个Spring Boot应用。 文章目录 什么是Spring Boot Starter?为何使用Spring B…

jetson nano——编译一些包的网址导航,pyside2,qt(持续更新)

目录 1.PySide2下载地址2.tesserocr下载地址3.Qt下载地址4.OpenSSL官网5.latex编译器下载地址5.1MikTex5.2TeX Live 1.PySide2下载地址 https://download.qt.io/official_releases/QtForPython/pyside2/ 如下图&#xff1a; 2.tesserocr下载地址 https://github.com/simonflue…

【送书福利第五期】:ARM汇编与逆向工程

文章目录 &#x1f4d1;前言一、ARM汇编与逆向工程1.1 书封面1.2 内容概括1.3 目录 二、作者简介三、译者介绍&#x1f324;️、粉丝福利 &#x1f4d1;前言 与传统的CISC&#xff08;Complex Instruction Set Computer&#xff0c;复杂指令集计算机&#xff09;架构相比&#…

进入docker容器中安装软件失败解,国外源慢,时间不同步,执行命令权限不够等问题解决办法

进入docker容器中安装软件失败解&#xff0c;时间不同步, 国外源慢&#xff0c;执行命令权限不够 等问题解决办法 首先我进入docker容器中&#xff0c;为了安装一个软件&#xff0c;引出了很多报错问题&#xff0c;报错如下&#xff1a; 1、无法用 ifconfig 或者 ip addr 的方…

Ansible自动化运维Inventory与Ad-Hoc

前言 自动化运维是指利用自动化工具和技术来简化、自动化和优化IT基础设施的管理和运维过程&#xff0c;从而提高效率、降低成本&#xff0c;并减少人为错误。在当今复杂的IT环境中&#xff0c;自动化运维已经成为许多组织和企业提高生产力和保证系统稳定性的重要手段。Ansibl…

Kubernetes operator系列:kubebuilder 实战演练 之 开发多版本CronJob

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 Kubernetes operator学习 系列文章&#xff0c;本节会在上一篇开发的Cronjob基础上&#xff0c;进行 多版本Operator 开发的实战 本文的所有代码&#xff0c;都存储于github代码库&#xff1a;https://github.c…