上班之路 华为OD真题 200

2023-11-05

public class Main{
 
    public static char[][] map;     //地图
    public static int t;    //转弯次数
    public static int c;    //路障个数
    public static int n;    //地图行数
    public static int m;    //地图列数
 
    public static void main(String[] args) {
 
        Scanner sc = new Scanner(System.in);
 
        t = sc.nextInt();
        c = sc.nextInt();
        n = sc.nextInt();
        m = sc.nextInt();
        sc.nextLine();
 
        map = new char[n][m];
        char[][] mapCopy = new char[n][m];
 
        int x = 0;
        int y = 0;
        for(int i=0; i<n; i++){
            String string = sc.nextLine();
            for(int j=0; j<m; j++){
                map[i][j] = string.charAt(j);
                mapCopy[i][j] = map[i][j];
                if(map[i][j] == 'S'){
                    x = i;
                    y = j;
                }
            }
        }
 
        if(toCompany( mapCopy, x, y, new ArrayList<>(), 0, 0) == 1){
            System.out.println("YES");
        }else {
            System.out.println("NO");
        }
 
    }
 
    /**
     *
     * @param newMap        地图,用来记录走过的行程
     * @param x             横坐标
     * @param y             纵坐标
     * @param list          走过的坐标集合
     * @param turn          转弯的次数
     * @param barricade     路过路障的次数
     * @return
     */
    public static int toCompany(char[][] newMap, int x, int y, List<int[]> list, int turn, int barricade){
 
        if(list.size() > 1){    //至少走过两个格子才能判断是否转弯
            int[] ints = list.get(list.size()-2);   //获取路过的倒数第二个格子
            if(ints[0] != x && ints[1] != y){   //如果横纵坐标没有相同的,则表示转过弯
                turn ++;
            }
        }
 
        list.add(new int[]{x, y});      //走过的格子
 
        if(turn > t){       //转弯次数大于t,则不符合,返回
            return 0;
        }
 
        if(newMap[x][y] == '*'){    //记录路障的个数
            barricade ++;
        }
 
        if(barricade > c){      //路障的个数大于c,则不符合,返回
            return 0;
        }
 
        if(newMap[x][y] == 'T'){    //到达公司完成路程
            return 1;
        }
 
        newMap[x][y] = 'X';     //走过的地方记录为X
 
        if(x>0){    //向上
            if(newMap[x-1][y] != 'X'){      //走过的格子不再走
                if(toCompany( newMap,x-1, y, list, turn, barricade) == 1){
                    return 1;
                }else {
                    newMap[x-1][y] = map[x-1][y];   //不符合要求的路程需要恢复
                    list.remove(list.size()-1);     //走过的格子需要剔除
                }
            }
        }
 
        if(x<n-1){      //向下
            if(newMap[x+1][y] != 'X'){      //走过的格子不再走
                if(toCompany( newMap,x+1, y, list, turn, barricade) == 1){
                    return 1;
                }else {
                    newMap[x+1][y] = map[x+1][y];   //不符合要求的路程需要恢复
                    list.remove(list.size()-1);     //走过的格子需要剔除
                }
            }
        }
 
        if(y>0){        //向左
            if(newMap[x][y-1] != 'X'){      //走过的格子不再走
                if(toCompany( newMap, x, y-1, list, turn, barricade) == 1){
                    return 1;
                }else {
                    newMap[x][y-1] = map[x][y-1];   //不符合要求的路程需要恢复
                    list.remove(list.size()-1);     //走过的格子需要剔除
                }
            }
        }
 
        if(y<m-1){      //向右
            if(newMap[x][y+1] != 'X'){      //走过的格子不再走
                if(toCompany( newMap, x, y+1, list, turn, barricade) == 1){
                    return 1;
                }else {
                    newMap[x][y+1] = map[x][y+1];   //不符合要求的路程需要恢复
                    list.remove(list.size()-1);     //走过的格子需要剔除
                }
            }
        }
 
        return 0;
    }
 
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

上班之路 华为OD真题 200 的相关文章

  • Java中有没有一种方法可以通过名称实例化一个类?

    我正在寻找问题 从字符串名称实例化一个类 https stackoverflow com questions 9854900 instantiate an class from its string name它描述了如何在有名称的情况下实例
  • 如何让 BlazeDS 忽略属性?

    我有一个 java 类 它有一个带有 getter 和 setter 的字段 以及第二对 getter 和 setter 它们以另一种方式访问 该字段 public class NullAbleId private static final
  • 日期语句之间的 JPQL SELECT [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将此 SQL 语句转换为等效的 JPQL SELECT FROM events WHERE events date BETWE
  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • java.lang.IllegalStateException:提交响应后无法调用 sendRedirect()

    这两天我一直在尝试找出问题所在 我在这里读到我应该在代码中添加一个返回 我做到了 但我仍然得到 java lang IllegalStateException Cannot call sendRedirect after the respo
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • 获取文件的总大小(以字节为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 java 高效获取文件大小 https stackoverflow com questions 116574 java get file size efficiently 我有一个名为 filenam
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • 关键字“table”附近的语法不正确,无法提取结果集

    我使用 SQL Server 创建了一个项目 其中包含以下文件 UserDAO java public class UserDAO private static SessionFactory sessionFactory static se
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • Spring Boot 无法更新 azure cosmos db(MongoDb) 上的分片集合

    我的数据库中存在一个集合 documentDev 其分片键为 dNumber 样本文件 id 12831221wadaee23 dNumber 115 processed false 如果我尝试使用以下命令通过任何查询工具更新此文档 db
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • java1.8分组及其常用方法

    filter 过滤条件 Map
  • 数据采集:数据挖掘的基础

    欢迎来到我的博客 作者 秋无之地 简介 CSDN爬虫 后端 大数据领域创作者 目前从事python爬虫 后端和大数据等相关工作 主要擅长领域有 爬虫 后端 大数据开发 数据分析等 欢迎小伙伴们点赞 收藏 留言 关注 关注必回关 上一篇文章已
  • html设置背景图片自适应

    在网上找了很久 终于在一个百度问答里找到正确答案 记录下来 方便以后使用 在中设置 第一行是图片url 第二行是背景图片不重复 第三行是达到窗口的百分百比例 第四行是图片固定 随着页面滚动而移动
  • 期刊和会议论文的区别

    文章目录 期刊 主要用途 标志 会议论文 标志 区分 期刊 主要用途 评审职称 硕士小论文发表 标志 期刊论文著录有作者 论文题名 期刊名 出版年 卷 volume 期 Issue 起止页码等信息 一般期刊以年为单位称为卷 在每年中又有很多
  • 在vue项目中优雅的使用Svg

    本文主要以 vue cli3 搭建的项目为例 来聊一下如何在项目中更优雅的使用 svg 众所周知 vue cli3 已经推出很长一段时间了 大家可以感受一下 vue cli3 带来的零配置体验 But 也相应带来了一些弊端 就是如归需要修改
  • 【星海随笔】SQL的基础操作

    架构话查询语言 Structured Query Language DDL 数据定义语言 dataDefinition Language CREATE ALTER DROP DML 数据操作语言 data Manipulation Lang
  • 如何用CSS实现响应式布局

    在今天的移动互联网的时代 越来越多的人通过手机或平板等移动设备访问网站 因此实现响应式布局变得越来越重要 在这篇博客中 我们将学习如何使用CSS实现响应式布局 什么是响应式布局 响应式布局是指在不同尺寸和设备上自适应调整页面显示效果的能力
  • 图片上传几种方式总结

    1 html表单上传 不推荐 最传统的图片上传方式是form表单上传 使用form表单的input type file 控件 打开系统的文件选择对话框 从而达到选择文件并上传的目的 form表单上传 表单上传需要注意以下几点 1 提供for
  • 【CV】使用 OpenCV 将照片变成卡通

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • i.MX6ULL - 问题解决:NFS挂载失败 - VFS: Unable to mount root fs on unknown-block(2,0)

    i IMX6ULL 问题解决 NFS挂载失败 VFS Unable to mount root fs on unknown block 2 0 开发环境 移植的linux5 4 7 0 ubuntu1804 x64 arm linux gn
  • 毕业设计-机器视觉深度学习的视频去水印算法

    目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有不少课题是研究生级别难度
  • MFC视频教程(孙鑫)学习笔记2-掌握C++

    这一集中 主要总结了C 经典语法与应用 1 C 的三大特性 封装 继承 多态 2 C 中提供了一套输入输出流类的对象 它们是cin cout和cerr 对应c语言中的三个文件指针stdin stdout stderr 分别指向终端输入 终端
  • Ubuntu下网页打开速度缓慢的解决方法

    Ubuntu下网页打开速度缓慢的解决方法 网速较慢可能是网络配置的原因导致 解决步骤如下 以下指令均在Ubuntu终端输入执行 一 查看Ubuntu版本信息 lsb release a 二 使用pdnsd软件为本机搭建DNS代理服务器 1
  • Redis第二十讲 Redis哨兵自动故障转移与优缺点

    sentinel哨兵是特殊的redis服务 不提供读写服务 主要用来监控redis实例节点 哨兵架构下client端第一次从哨兵找出redis的主节点 后续就直接访问redis的主节点 不会每次都通过sentinel代理访问redis的主节
  • ES 聚合函数的用法

    1 ES聚合分析是什么 聚合分析是数据库中重要的功能特性 完成对一个查询的数据集中数据的聚合计算 如 找出某字段 或计算表达式的结果 的最大值 最小值 计算和 平均值等 ES作为搜索引擎兼数据库 同样提供了强大的聚合分析能力 对一个数据集求
  • K和KB的区别

    来源 综合自己和网上的观点 问题1 K与KB之间有什么区别 我在做一道解时 就是 某计算机字长16位 它的存储容量是1MB 按字编址 这经的寻址范围是 A 512K B 1M C 512KB 答案给的是A 我很不解 为什么512K与512K
  • (error) CROSSSLOT Keys in request don‘t hash to the same slot 解决方法

    Redis 哈希槽基本概念 哈希槽 hash slot 是来自Redis Cluster的概念 但在各种集群方案都有使用 哈希槽是一个key的集合 Redis集群共有16384个哈希槽 每个key通过CRC16散列然后对16384进行取模来
  • Python opencv 机器学习 5.knn pca降维 ocr识别数字 mnist数据集

    coding utf 8 from numpy import import numpy as np import struct import matplotlib pyplot as plt import operator 定义一个全局特征
  • 轻松获取在线媒体:视频下载工具推荐

    ytdl org youtube dl Stars 121 0k License Unlicense youtube dl 一个命令行程序 可以从YouTube com和其他视频网站下载视频 基于 Python 实现 你可以在Unix Wi
  • 上班之路 华为OD真题 200

    public class Main public static char map 地图 public static int t 转弯次数 public static int c 路障个数 public static int n 地图行数 p