华为OD机试真题 新系统 - WIFI设备网络规划 (JavaPyCC++JsGo)

2 阅读3分钟

WIFI设备网络规划

2026 华为OD机试真题 4月19日华为OD上机新系统考试真题 200 分题型

点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

题目描述

WIFI网络中,专业的网络规划不仅可以提升业务体验,还可以减少部署成本。把办公区可以看作一个n* m的网格,部分网格包含墙壁(无法放置AP(WI一FI设备),部分为空地(可以放置AP)。每个AP覆盖范围是一个3*3的正方形(包括自身位置、上下左右、以及对角线区域),且AP和AP的覆盖区域不能重叠,防止相互干扰。

现在给定一个mx n(不超过50 * 50)的网络布局图(墙壁用字符#表示,空地用字符.表示),请设计一个算法,计算最少放置多少数量的AP来覆盖所有空地?如果不能按条件完成覆盖,请返回-1。

输入描述

第一行输入 m n

接下来m行输入每一行字符

输出描述

最少放置多少数量的AP来覆盖所有空地?如果不能按条件完成覆盖,请返回-1。

示例1

输入

7 7
.......
.......
.......
...#...
.......
.......
.......

输出

1

说明

放置一个 AP 在 (1, 1) 位置即可覆盖周围 3x3 区域。

示例2

输入

5 5
..#..
..#..
..#..
..#..
..#..

输出

4

说明

解题思路

核心思想

该问题可以建模为一个**精确覆盖问题(Exact Cover Problem)**的变体。我们需要在网格中的空地(.)上放置最少数量的 AP,使得:

  1. 每个 AP 覆盖其中心周围的 3×33 \times 3 区域。
  2. 任意两个 AP 的覆盖区域不得重叠。
  3. 所有空地必须被覆盖。

算法步骤:

  1. 预处理

    • 记录所有空地的位置,并分配唯一的 ID。
    • 遍历每个空地位置 (i,j)(i, j),将其作为 AP 的潜在中心。计算该 AP 覆盖的空地集合以及它在网格中占用的所有位置(用于重叠检查)。
    • 建立映射关系:每个空地 ID 对应哪些潜在的 AP 中心可以覆盖它。
  2. 搜索逻辑 (DFS + 回溯)

    • 使用深度优先搜索寻找最小的 AP 数量。
    • 启发式策略:每次选择一个尚未被覆盖且“可选覆盖方案最少”的空地进行处理。这种“最少选择优先”的策略能极大地压缩搜索空间。
    • 冲突检查:在放置一个 AP 时,检查其 3×33 \times 3 的覆盖范围是否与已放置的 AP 覆盖范围重叠。
    • 剪枝:如果当前已使用的 AP 数量已经达到或超过已找到的最优解,则停止当前分支的搜索。
  3. 结果判断

    • 如果搜索能覆盖所有空地,记录最小值。
    • 如果无法覆盖所有空地,返回 -1。

复杂度分析

  • 时间复杂度:最坏情况下是指数级的,但由于网格大小限制(50×5050 \times 50)以及“不重叠”的强约束,实际搜索空间会被大幅削减。启发式搜索在处理此类精确覆盖问题时通常表现良好。
  • 空间复杂度O(M×N)O(M \times N),用于存储网格状态、空地索引及递归栈。