华为OD刷题C卷 - 每日刷题31(园区参观路径,围棋的气)

1、(园区参观路径):

这段代码是解决“园区参观路径”的问题。它提供了一个Java类Main,其中包含main方法和getResult方法,以及一个未使用的dfs方法,用于计算从园区起点到终点的不同参观路径数量。

main方法首先读取园区的长和宽,然后读取园区的布局信息,其中0表示可以参观,1表示不能参观。接着,调用getResult方法并打印出不同的路径数量。

getResult方法使用动态规划来解决这个问题。创建一个二维数组dp来存储到达每个位置的路径数量。通过遍历园区布局,如果当前位置可以参观,则更新dp数组,将到达该位置的路径数量设置为从上方和左方到达的路径数量之和。最后,返回到达终点的路径数量。

dfs方法是一个递归方法,用于深度优先搜索所有可能的路径。然而,此方法在问题规模较大时可能会超时,因为它没有利用动态规划来减少重复计算。

2、(围棋的气):

这段代码是解决“围棋的气”的问题。它提供了一个Java类Main,其中包含main方法,用于计算围棋棋盘上黑棋和白棋的气的数量。

main方法首先读取黑棋和白棋的坐标,然后创建一个19x19的棋盘数组,将黑棋和白棋的位置分别标记为1和2。接着,使用一个二维数组offsets来表示可能的移动方向(上、下、左、右)。通过遍历棋盘上的每个空位(标记为0的位置),检查其周围是否有黑棋或白棋,从而确定每个空位是否是黑棋或白棋的气。

最后,打印出黑棋和白棋的气的数量。

package OD357;import java.util.ArrayList;
import java.util.Scanner;/*** @description 园区参观路径* @level 4* @score 200*//*** 题目描述* 园区某部门举办了Family Day,邀请员工及其家属参加;* <p>* 将公司园区视为一个矩形,起始园区设置在左上角,终点园区设置在右下角;* <p>* 家属参观园区时,只能向右和向下园区前进,求从起始园区到终点园区会有多少条不同的参观路径。* <p>* image* <p>* 输入描述* 第一行为园区的长和宽;* <p>* 后面每一行表示该园区是否可以参观,0表示可以参观,1表示不能参观* <p>* 输出描述* 输出为不同的路径数量*/
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {//dfs算法中最后结果static int res = 0;static int m;static int n;public static void main(String[] args) {Scanner sc = new Scanner(System.in);//长 宽m = sc.nextInt();n = sc.nextInt();//园区int[][] park = new int[m][n];for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {park[i][j] = sc.nextInt();}}//输出有多少条不同的路径//dfs(0,0,park);long result = getResult(park);System.out.println(result);}//动态规划 返回从起点到终点的路径条数public static long getResult(int[][] park) {//起点和终点不能访问,则返回0if (park[0][0] == 1 || park[m - 1][n - 1] == 1) {return 0;}//dp[i][j]表示从起点到(i,j)点的路径条数  dp[i][j] = dp[i-1][j]+dp[i][j-1]long[][] dp = new long[m][n];dp[0][0] = 1;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {//遇到障碍,跳过if (park[i][j] == 1) continue;//只能向右和向下走 所以到达点(i,j)的上一步只能是从上或者从左边来if (i > 0) {dp[i][j] += dp[i - 1][j];}if (j > 0) {dp[i][j] += dp[i][j - 1];}}}return dp[m - 1][n - 1];}/*** 深度搜索 递归 能到达终点的个数 数量级大时会超时** @param x* @param y* @param park* @return boolean* @create 2024/3/24 21:49*/public static boolean dfs(int x, int y, int[][] park) {//如果园区起点和终点不能参观,直接falseif (park[0][0] == 1 || park[m - 1][n - 1] == 1) {return false;}//返回标志if (x == park.length - 1 && y == park[0].length - 1) {return true;}//只能往右和往下走,不会重复//如果右边不为1 则往右走if (y + 1 < park[0].length && park[x][y + 1] != 1) {if (dfs(x, y + 1, park)) {res++;}}//如果下面不是1,则可以往下走if (x + 1 < park.length && park[x + 1][y] != 1) {if (dfs(x + 1, y, park)) {res++;}}//如果向下和向右都不能走return false;}}
package OD358;import java.util.Arrays;
import java.util.Scanner;/*** @description 围棋的气* @level 4* @score 100*/
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);//黑棋坐标int[] black = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();//白棋坐标int[] white = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();//棋盘int[][] board = new int[19][19];//取黑棋for (int i = 0; i < black.length; i += 2) {int x = black[i];int y = black[i + 1];//把该位置置为1board[x][y] = 1;}//取白棋for (int i = 0; i < white.length; i += 2) {int x = white[i];int y = white[i + 1];//把白棋置为2board[x][y] = 2;}//统计黑白棋的气int countBlack = 0;int countWhite = 0;//上下左右操作int[][] offsets = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};//遍历棋盘,寻找可能是黑白棋的气的点:该点为0,且上下左右存在1或者2for (int i = 0; i < 19; i++) {for (int j = 0; j < 19; j++) {if (board[i][j] == 0) {//该点是否是黑棋的气boolean isBlack = false;boolean isWhite = false;//遍历询问:该点是否是黑、白的气for (int[] offset : offsets) {int newI = i + offset[0];int newJ = j + offset[1];//如果下标越界,跳出if (newI < 0 || newI >= 19 || newJ < 0 || newJ >= 19) continue;isBlack = isBlack || board[newI][newJ] == 1;isWhite = isWhite || board[newI][newJ] == 2;}//如果是黑棋的气,则黑棋气+1 因为是按顺序遍历的空白格,故同一个气只会被算作一次if (isBlack) countBlack++;if (isWhite) countWhite++;}}}System.out.println(countBlack + " " + countWhite);}
}

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

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

相关文章

助力OTT大屏营销,酷开科技引领产业变革与创新

随着大屏电视产品的迭代&#xff0c;越来越多家庭以增换购等多种形式获得超高清、超大屏的智能电视&#xff0c;大屏的人均拥有量和渗透率进一步增加。在这种情况下&#xff0c;通过OTT应用为载体&#xff0c;将大量内容持续输送到大屏终端&#xff0c;从而形成了电视硬件普及与…

工控机与普通电脑的区别对于工业自动化应用至关重要

商用计算机和工业计算机之间的相似之处可能多于差异之处。工业电脑利用了消费技术领域的许多进步&#xff0c;但增加了工业应用所必需的软件、编程、确定性和连接性。 专业人士表示&#xff1a;“从增加内存到摩尔定律所描述的处理能力的指数级增长&#xff0c;工业控制必将受…

【C++】和【预训练模型】实现【机器学习】【图像分类】的终极指南

目录 &#x1f497;1. 准备工作和环境配置&#x1f495; &#x1f496;安装OpenCV&#x1f495; &#x1f496;安装Dlib&#x1f495; 下载并编译TensorFlow C API&#x1f495; &#x1f497;2. 下载和配置预训练模型&#x1f495; &#x1f496;2.1 下载预训练的ResNet…

pip 配置缓存路径

在windows操作平台&#xff0c;默认情况&#xff0c;pip下使用的系统目录 C:\Users\用名名称\AppData\Local\pip C盘是系统盘&#xff0c;如果常常使用pip安装会占用大量的空间很快就满&#xff0c;这时候就有必要变更一下缓存保存路径了。 pip 配置缓存路径&#xff1a; Win…

Day46 - Day50

Day46 - Day50 Day46&#xff08;2001Text2&#xff09; As the Internet becomes more and more commercialized, it is in the interest of business to universalize access – after all, the more people online, the more potential customers there are. 随着互联网越发…

FM全网自动采集聚合影视搜索源码

源码介绍 FM 全网聚合影视搜索(响应式布局)&#xff0c;基于 TP5.1 开发的聚合影视搜索程序&#xff0c;本程序无数据库&#xff0c;本程序内置P2P 版播放器&#xff0c;承诺无广告无捆绑。片源内部滚动广告与本站无关,谨防上当受骗&#xff0c;资源搜索全部来自于网络。 环境…

效率翻倍!ComfyUI 必装的工作流+模型管理插件 Workspace Manager

一、Workspace Manager 安装方式 插件 Github 网址&#xff1a; https://github.com/11cafe/comfyui-workspace-manager 如果你没有安装 Workspace Manager 插件&#xff0c;可以通过以下 2 种方式安装&#xff1a; ① 通过 ComfyUI Manager 安装&#xff08;推荐&#xff0…

基于python-CNN卷积网络训练识别牛油果和猕猴桃-含数据集+pyqt界面

代码下载地址&#xff1a; https://download.csdn.net/download/qq_34904125/89383066 本代码是基于python pytorch环境安装的。 下载本代码后&#xff0c;有个requirement.txt文本&#xff0c;里面介绍了如何安装环境&#xff0c;环境需要自行配置。 或可直接参考下面博文…

LeetCode | 35.搜索插入位置

这套题可以直接遍历&#xff0c;找到第一个大于target的数并返回其位置即可&#xff0c;但是时间复杂度为 O ( n 2 ) O(n^2) O(n2)&#xff0c;题目中明确要求时间复杂度为 O ( l o g n ) O(logn) O(logn)&#xff0c;考虑二分查找算法&#xff0c;这道题就是标准的二分查找的一…

android 播放视频

播放视频文件 新建一个activity_main.xml文件&#xff0c;文件中放置了3个按钮&#xff0c;分别用于控制视频的播放、暂停和重新播放。另外在按钮的下面又放置了一个VideoView&#xff0c;稍后的视频就将在这里显示。 <LinearLayout xmlns:android"http://schemas.an…

时钟和系统控制

https://adi.eetrend.com/files/2017-09/wen_zhang_/100008016-26548-shizhongyupinluhechengjibenyuanli20170913.pdf 什么是时钟?常用频率是多少? 与数据波形不同,时钟信号是一个方波,其频率通常是恒定的。 常用频率包括: GPS 使用 1 pps(脉冲/秒)有线通信常用8 kH…

Jupyter Notebook 安装使用

1.安装 2.使用 【最全指南】如何在 Jupyter Notebook 中切换/使用 conda 虚拟环境&#xff1f;_jupyter notebook 使用conda-CSDN博客

程序员该有怎么样的职业素养

目录 1、持续学习 2、解决问题的能力 3、团队协作能力 4、责任感 5、沟通能力 6、总结 作为一个从业者&#xff0c;我认为对于程序员而言&#xff0c;职业素养是非常重要的。职业素养不仅影响个人的职业发展&#xff0c;也影响团队和企业的整体氛围和效率。在我的职业生涯…

HIL测试-车辆模型

HIL测试-车辆模型 车辆模型相关疑问车辆模型常见的车辆模型开发工具和软件车辆模型相关疑问 A:车辆模型是什么? B:就是虚拟的车辆,就是车上的一些加减速踏板,方向盘转角之类。 A:如果不用车辆模型可以做HIL么? B:那要看做什么?做整车级别的是需要的。 A:就某个控制器的,除…

浅谈数据管理架构 Data Fabric(数据编织)及其关键特征、落地应用

伴随着企业从数字化转型迈向更先进的数智化运营新阶段&#xff0c;对看数、用数的依赖越来越强&#xff0c;但数据的海量增长给数据管理带来一系列难题&#xff0c;如数据类型和加工链路日益复杂&#xff0c;数据存储和计算引擎更加分散&#xff0c;数据需求响应与数据质量、数…

idea中maven下载依赖缓慢解决方法

解决IDEA中Maven下载依赖包过慢或报错的问题_maven 下载依赖要很久-CSDN博客

STM32硬件接口I2C应用(基于HMC5883L)

目录 概述 1 STM32Cube控制配置I2C 1.1 I2C参数配置 1.2 使用STM32Cube产生工程 2 HAL库函数介绍 2.1 初始化函数 2.2 写数据函数 2.3 读数据函数 3 认识HMC5883L 3.1 HMC5883L功能介绍 3.2 HMC5883L的寄存器 4 HMC5883L驱动程序实现 4.1 驱动函数实现 4.2 完整驱…

如何使用CCS9.3打开CCS3.0工程

如何使用CCS9.3打开CCS3.0工程 点菜单栏上的project&#xff0c;选择Import Legacy CCSv3.3 Porjects…&#xff0c;弹出对话框&#xff0c;通过Browse…按钮导入一个3.3版本的工程项目&#xff1b; 选择.pjt文件&#xff0c;选择Copy projects into worlkspace 右击选择P…

一文者懂LLaMA 2(原理、模型、训练)

引言 LLaMA&#xff08;Large Language Model Meta AI&#xff09;是Meta&#xff08;前身为Facebook&#xff09;开发的自然语言处理模型家族之一&#xff0c;LLaMA 2作为其最新版本&#xff0c;展示了在语言理解和生成方面的显著进步。本文将详细解读LLaMA 2的基本原理、模型…

Python酷库之旅-比翼双飞情侣库(08)

目录 一、xlrd库的由来 二、xlrd库优缺点 1、优点 1-1、支持多种Excel文件格式 1-2、高效性 1-3、开源性 1-4、简单易用 1-5、良好的兼容性 2、缺点 2-1、对.xlsx格式支持有限 2-2、功能相对单一 2-3、更新和维护频率低 2-4、依赖外部资源 三、xlrd库的版本说明 …