提供一个新思路解决火把照亮范围
查看原帖
提供一个新思路解决火把照亮范围
1211266
clayxing楼主2025/1/16 15:48

我看题解里都没有提到曼哈顿距离,其实可以用曼哈顿距离来解决火把照亮问题。

曼哈顿距离就是两点在南北方向上的距离加上在东西方向上的距离,即d(i,j)=|xi-xj|+|yi-yj|。 曼哈顿距离 首先我们观察火把照亮范围的规律。

    |暗|暗| 光 |暗|暗|
    |暗|光| 光 |光|暗|
    |光|光|火把|光|光|
    |暗|光| 光 |光|暗|
    |暗|暗| 光 |暗|暗|

可以发现两个规律:

  1. 所有的光都是对称的
  2. 光到火把的曼哈顿距离都小于2

所以我们只需要在5x5的范围内使用一个if判断就可以解决问题。

if (abs(x - i) + abs(y - j) <= 2) {
    arr[i][j] = 1;
}

但是这个方法在时间效率上并不比暴力高,所以只是看起来更优雅一点而已

2025/1/16 15:48
加载中...