华为机试二星题--机器人走迷宫
题目
机器人走一个迷宫,给出迷宫的x和y(x*y的迷宫)并且迷宫中有障碍物,输入k表示障碍物有k个,并且会将障碍物的坐标挨个输入.
机器人从0,0的位置走到x,y的位置并且只能向x,y增加的方向走,不能回退.
如代码类注释展示的样子,#表示可以走的方格,0代表障碍,机器人从0,0的位置只能向下或者向前走到出口.
其中会有不可达方格和陷阱方格.不可达方格为第四行前三个,该机器人在行走路径上不可能走到的方格,陷阱方格如第一行最后两个,走进之后则不能抵达终点.
要求: 输出陷阱和不可达方格方格数量
解析
该题为动态规划题,采用动态规划+标记法将该二维数组通过迭代方法走过能走的路径并用不同标记标记所路过的方块属性即可.
先采用迭代法迭代到结尾,再从结尾属性一步步回推回来即可
该算法还可以优化,在标记时候记录好陷阱方格数量和路径方格数量最后总方格数量减去这两个类型方格数量就是不可达方格数量.可少了双重循环时间.但我做题的时候下方的路径计算应该有那个地方判断重复导致数量总是多出来.
import java.util.Scanner;
/*** @ClassName 华为机试二星题--机器人走迷宫* 进 # # # # #* # # # # 0 0* 0 0 0 # # #* # # # # # 出*/
public class HWRobotMaze01 {public static void main(String[] args) {// 0 是未踩过的。 1是墙。 2是踩过的。Scanner in = new Scanner(System.in);int x = in.nextInt();int y = in.nextInt();int[][] room = new int[x][y];int wall = in.nextInt();while(wall-->0){int wallX = in.nextInt();int wallY = in.nextInt();room[wallX][wallY] = 1;}path(room, 0, 0, x-1, y-1);int badPath = 0; //陷阱int noWay = 0; // 不可达for(int i =0; i< x; i++){for(int j=0; j< y; j++){if(room[i][j] == 9){badPath += 1;}else if(room[i][j] == 0){noWay += 1;}}}System.out.println(badPath+" "+noWay);}//不可达方格 : 机器人无法通过增加X Y值到的方格.走完还是0的代表不可达//陷阱方格 : 走到该位置不能正确走到终点的方格。 向前/向上不可达/同为陷阱方格则也标记为陷阱方格 9//走过的为2private static void path(int[][] room, int nextX, int nextY, int x, int y){//判断是墙直接跳过if(room[nextX][nextY] ==1){return;}if(room[nextX][nextY] != 0){return;}if(nextX == x && nextY == y){room[nextX][nextY] = 2;return;}if(nextX < x){path(room, nextX+1, nextY, x, y);}if(nextY < y){path(room, nextX, nextY+1, x, y);}//该点向上/向前均为不可达/陷阱方格则为陷阱方格if(nextX == x || nextY == y){if(nextX == x && nextY < y && room[nextX][nextY+1] != 2){room[nextX][nextY] = 9;}else if(nextY == y && nextX < x && room[nextX+1][nextY] != 2){room[nextX][nextY] = 9;}else{room[nextX][nextY] = 2;}}else if(room[nextX+1][nextY] !=2 && room[nextX][nextY+1] !=2){room[nextX][nextY] = 9;}else{room[nextX][nextY] = 2;}return;}}
华为机试二星题--机器人走迷宫相关推荐
- 华为OD机试Golang解题 - 机器人走迷宫
华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南) 华为od机试,独家整理 已参加机试人员的实战技巧 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单 ...
- 【华为机试真题 Python实现】2022年4、5月高频机试题
文章目录 2022年4.5月高频机试题 机试必须要会的函数 输入输出处理 for 循环 通过下标访问元素 直接迭代访问元素 同时访问下标和元素 while 循环 字符ASSIC码转换 进制转换 绝对值 ...
- 【华为机试真题 Python实现】2022年4季度最新机试题
文章目录 2022年4季度最新机试题 机试必须要会的函数 输入输出处理 for 循环 通过下标访问元素 直接迭代访问元素 同时访问下标和元素 while 循环 字符ASSIC码转换 进制转换 绝对值计 ...
- 【华为机试真题详解】小兔子繁殖详解
文章目录 前言 讲解试题 如何写一个递归函数 DP2 跳台阶 小兔子繁殖 前言 <华为机试真题详解>专栏含牛客网华为专栏.华为面经试题.华为OD机试真题. 如果您在准备华为的面试,期间有想 ...
- [华为机试真题][2014]62.去除重复字符并排序
题目 描述: 去除重复字符并排序 运行时间限制: 无限制 内容限制: 无限制 输入: 字符串 输出: 去除重复字符并排序的字符串 样例输入: aabcdefff 样例输出: abcdef 代码 /*- ...
- 【华为机试真题 Python实现】查找众数及中位数
文章目录 前言 题目描述 示例 1 示例 2 参考代码 前言 <华为机试真题>专栏含牛客网华为专栏.华为面经试题.华为OD机试真题. 如果您在准备华为的面试,期间有想了解的可以私信我,我会 ...
- 【华为机试真题详解】不含 101 的数【2022 Q4 | 100分】
文章目录 前言 题目描述 输入描述 输出描述 示例 1 示例2 题目解析 参考代码 前言 <华为机试真题详解 Python实现>专栏含牛客网华为专栏.华为面经试题.华为OD机试真题. 如果 ...
- 【华为机试真题详解】开心消消乐【2022 Q4 | 100分】
文章目录 前言 题目描述 输入描述 输出描述 示例 1 题目解析 参考代码 前言 <华为机试真题详解 Python实现>专栏含牛客网华为专栏.华为面经试题.华为OD机试真题. 如果您在准备 ...
- [华为机试真题]69.姓名的夫妻相
题目 在中国,形容夫妻恩爱的词汇中,大家用的比较多的就是"夫妻相".所谓"夫妻相",就是两个人看上去比较般配,长相.身材等某些方面有一定的相似度. 本题则另辟蹊 ...
最新文章
- 学python有哪些书推荐-Python 有哪些入门学习方法和值得推荐的经典教材?
- 深入理解JVM文章合集
- laravel token ajax,Laravel中ajax post操作需要传递csrf token的最优化解决方式
- boost::qvm::deduce_vec相关的测试程序
- property的修饰符
- pydev导入eclipse
- 清华大学黄民烈老师:本科生如何做出好的科研
- C语言和C++的区别到底是什么?
- lievent源码分析:evbuffer
- SAP soamanager发布的Webservice服务,调用时出现http500报错
- VHDL学习:两种方式实现四选一选择器
- 股市日记之十四:牛二阶段(上篇)
- Cell-type–specific || 单细胞文章新范式
- 大学英语精读第三版(第四册)复习笔记——文章内容摘要
- 收藏:产品经理和技术经理等的OKR模板大全
- 编码:隐匿在计算机软硬件背后的语言(1)--编码到二进制数字系统
- isalpha、isalnum、islower、isupper等字符函数
- 什么叫断章取义,什么叫曲解
- ARM(ARM处理器) x64和x86
- 论码流、码率、采样率、比特率、帧速率、分辨率、高清视频的概念
热门文章
- cdr多页面排版_教你怎样在CDR怎样编号自动排版.doc
- /etc/issue和/etc/motd
- Linux系统load average异常值处理的trick
- 通过SetWindowsHookEx实现跨进程子类化
- stm32语音识别文字显示_『开源项目』基于STM32的智能垃圾桶之语音识别
- Linux脚本开头#!/bin/bash和#!/bin/sh是什么意思以及区别
- 跑得最快的10种动物
- python金融大数据分析师工资待遇_请问数据分析师这个工作怎么样,是否值得成为努力方向?...
- php 使用 谷歌验证器
- 取模(取余)的具体含义