• 华为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功能: 给定房间大小,墙壁位置,请计算出陷阱方格与不可达方格分别有多少个

    代码实现

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

  • 相关阅读:
    调整COSWriter解决X-easypdf / PDFBOX生成大量数据时OOM问题
    NX二次开发-使用NXOPEN C#向导模板做开发以及如何查看C#帮助文档写代码
    项目构建工具maven的基本配置+idea 中配置 maven
    记一次线上故障排查
    【全国30米DEM、全国路网矢量、100万全国基础地理数据、高德行政区划数据】一次分享
    JVM学习笔记
    什么行业适合做谷歌SEO?
    【Python】从基础到进阶(一):了解Python语言基础以及变量的相关知识
    Django03_Django基本配置
    如何使用PHP进行数据库连接和操作?
  • 原文地址:https://blog.csdn.net/SD_JZZ/article/details/132666722