25届-8.18DJI秋招(改编题)

💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历

👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸

✨ 合集传送们 -> 🧷学长刷题笔记

🍒 本专栏已收集 140+ 套题 🍄 题面描述等均已改编,如果和你实际看到的题面描述不一样请理解,做法和题目本质基本不变。

🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力 💞

alt

🚔无人机巡逻路径

问题描述

LYA 公司正在开发一款用于巡逻的无人机。这款无人机被部署在一个矩形区域内,该区域由 个方格组成。每个方格要么是空地(用 表示),要么是障碍物(用 表示)。无人机从左上角(即坐标 )出发,初始朝向右侧。

无人机的飞行规则如下:

  1. 沿当前方向直线飞行,直到遇到边界或障碍物。
  2. 遇到边界或障碍物时,顺时针旋转 度。
  3. 重复步骤 1 和 2,直到无法继续飞行。

无人机经过的每个方格(包括起始位置)都被视为已巡逻。请计算无人机能够巡逻到的方格数量。

输入格式

第一行包含两个整数 ,表示矩形区域的行数和列数。

接下来 行,每行包含 个整数(),描述了整个区域的布局。其中 表示空地, 表示障碍物。

输出格式

输出一个整数,表示无人机能够巡逻到的方格数量。

样例输入1

3 3
0 0 0
1 1 0
0 0 0

样例输出1

7

样例输入2

3 3
0 0 0
0 0 0
0 0 0

样例输出2

8

数据范围

  • 输入保证左上角 位置始终为空地(

题解

本题可以通过 DFS 来模拟无人机的巡逻路径。

从起点开始,按照题目规则移动无人机,并记录已访问的格子。

关键点在于处理方向变化和避免无限循环,具体看代码实现。

对于每个格子最多被访问 4 次(每个方向一次),超过则说明进入循环,应当停止搜索。

时间复杂度为 ,空间复杂度也为

参考代码

  • Python
# 定义方向数组,分别表示上、右、下、左四个方向
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

def patrol_area(grid):
    m, n = len(grid), len(grid[0])
    visited = [[0] * n for _ in range(m)]
    patrolled = 0

    def dfs(x, y, direction):
        nonlocal patrolled
        # 如果当前格子访问次数超过4次,停止搜索
        if visited[x][y] >= 4:
            return
        # 如果是第一次访问该格子,增加巡逻计数
        if visited[x][y] == 0:
            patrolled += 1
        visited[x][y] += 1

        # 尝试四个方向
        for i in range(4):
            new_dir = (direction + i) % 4
            nx, ny = x + dx[new_dir], y + dy[new_dir]
            # 如果新位置有效且为空地,继续搜索
            if 0 <= nx < m and 0 <= ny < n and grid[nx][ny] == 0:
                dfs(nx, ny, new_dir)
                return

    # 从左上角开始,初始方向向右
    dfs(0, 0, 1)
    return patrolled

# 读取输入
m, n = map(int, input().split())
grid = [list(map(int, input().split())) for _ in range(m)]

# 计算并输出结果
result = patrol_area(grid)
print(

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

本专栏短期内不再更新,请勿继续订阅

全部评论

相关推荐

07-22 11:53
门头沟学院 Java
终于有一个保底的offer了,但感觉是白菜价
北凝a:我想问问,提前批的offer 有问你啥时候到岗吗,如果你还想找其他的怎么办
点赞 评论 收藏
分享
06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
牛客83700679...:简历抄别人的,然后再投,有反馈就是简历不行,没反馈就是学历不行,多投多改只要技术不差机会总会有的
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务