当前位置: 首页 > news >正文

华为OD机试-机器人走迷宫

 题目描述

机器人走一个迷宫,给出迷宫的x和y(x*y的迷宫)并且迷宫中有障碍物,输入k表示障碍物有k个,并且会将障碍物的坐标挨个输入.
机器人从0,0的位置走到x,y的位置并且只能向x,y增加的方向走,不能回退.
如代码类注释展示的样子,#表示可以走的方格,0代表障碍,机器人从0,0的位置只能向下或者向前走到出口.
其中会有不可达方格和陷阱方格.不可达方格为第四行前三个,该机器人在行走路径上不可能走到的方格,陷阱方格如第一行最后两个,走进之后则不能抵达终点.
要求: 输出陷阱和不可达方格方格数量

1.房间有 X*Y 的方格组成,例如下图为 6*4 的大小。每一个放个以坐标 (x,y) 描述
2.机器人固定从方格(,) 出发,只能向东或者向北前进出口固定为房间的最东北角,如下图的方格(5,3)。用例保证机器人可以从入口走到出口。
3.房间有些方格是墙壁,如 (4,1)机器人不能经过那儿。
4.有些地方是一旦到达就无法走到出口的,如标记为 B 的方格,称之为陷阱方格
5.有些地方是机器人无法达到的,如标记为 A 的方格,称之为不可达方格,不可达方格不包括墙壁所在的位置6.如下实例图中,陷阱方格有 2 个,不可达方格有 3 个。
7.请为该机器人实现 路径规划Q功能: 给定房间大小,墙壁位置,请计算出陷阱方格与不可达方格分别有多少个

代码实现

# coding:utf-8
"""
@Date   :2023/7/22
@Title  :机器人走迷宫
@discript:https://dream.blog.csdn.net/article/details/128986089
"""def robotWalkMaze(x, y, obs):dp = [['#'] * y for _ in range(x)]# 把墙壁坐标对应的结果标记为0for ob in obs:i, j = obdp[i][j] = 0def dfs(x_, y_):if x_ == x - 1 and y_ == y - 1:  # 如果坐标等于出口位置,返回路线可用,标记1dp[x_][y_] = 1return 1elif x_ >= x or y_ >= y or dp[x_][y_] == 0:  # 如果坐标大于等于边界,或者dp中标记为0,即墙壁,这路线标记为-1,不可用return -1elif dp[x_][y_] != '#':  # 如果当前位置不等于#,即已经被标记过,返回该标记即可return dp[x_][y_]else:  # 按照深度优先算法先向下走,再向右走down = dfs(x_ + 1, y_)right = dfs(x_, y_ + 1)if down == -1 and right == -1:  # 如果当前位置标记为向下和向右都标记为-1,即说明该位置是陷阱方块dp[x_][y_] = -1else:dp[x_][y_] = max(down, right)  # 位置信息取向下或者向右最大值,其实就是只要有1就okreturn dp[x_][y_]dfs(0, 0)r1 = sum(line.count(-1) for line in dp)r2 = sum(line.count('#') for line in dp)  # 位置标记没被更新,说明是不可达的方块return r1, r2x, y = map(int, input('X,Y:').split())
obss = []for _ in range(int(input('N:'))):obj = tuple(map(int, input('location:').split(' ')))obss.append(obj)c1, c2 = robotWalkMaze(x, y, obss)
print(c1, c2)

http://www.lryc.cn/news/155489.html

相关文章:

  • Jenkins搭建步骤Linux环境
  • 2023 AZ900备考
  • 青翼科技基于VITA57.1的16路数据收发处理平台产品手册
  • Ansible_自动化运维实战(一)
  • 说说Flink中的State
  • 适合心理法律在线咨询预约含视频图文电话咨询功能的小程序开发
  • Redis-Cluster集群操作--添加节点、删除节点
  • ModaHub魔搭社区:星环科技向量数据库Hippo社区版来啦
  • gitHub添加ssh
  • sql:SQL优化知识点记录(十)
  • STM32 RTC实验
  • C#设计打开文件
  • mysql指令行登录如何添加mysql.sock的配置?(亲测)
  • Git 设置和清除用户名和邮箱
  • 【系统设计系列】 回顾可扩展性
  • 科兴未来 |轨道交通专业赛 第十二届中国创新创业大赛
  • leetcode 42. 接雨水
  • 【Lychee图床】本地电脑搭建私人图床,公网远程访问
  • 【MySQL系列】-ORDER BY……HAVING详解及limit
  • 浅析Keil MDK下串行Flash的下载算法设计
  • springboot自动装配原理,手写一个starter。
  • 革命性的电子元件:RAD继电器 | 百能云芯
  • 文献阅读:Deep Learning Enabled Semantic Communication Systems
  • 巨人互动|游戏出海游戏出海效果怎样?
  • 二、GoLang输出HelloWorld、变量定义、数据类型的转换
  • Mars3d图层树//图层管理加载时设置默认折叠的状态
  • 区块链技术|DApp与传统应用程序的关键区别
  • Python 加密解密技巧大揭秘:让你的数据安全无忧
  • C#判断字符是否为utf16编码
  • centos7上hive3.1.3安装及配置