algorithm - 这两个广度优先搜索问题有何不同

标签 algorithm matrix breadth-first-search

下面是两个广度优先搜索遍历问题。

问题 1:317 - 距所有建筑物的最短距离 enter image description here

这个问题的解决方法是从每个建筑物做广度优先搜索遍历,记录从它到可达单元格的距离。 最短距离是从每个建筑物可到达的小区,并且具有从每个建筑物到达该小区的距离的累积最短距离。

问题 2:296 - 最佳汇合点 enter image description here 我发现这道题和前面的一模一样,只是这里没有2,也就是障碍物。为什么会有不同的解决方案?

我试图了解这两个问题之间的区别,以及为什么第一个问题的解决方案不适用于第二个问题。曼哈顿距离与它有什么关系吗?

编辑:根据下面 SimMac 的回答,我尝试更新曼哈顿和从位于 (0,1) 的建筑物开始的行驶距离。输入以及曼哈顿和行驶距离如下。 SimMac,请你验证这些。

Input
0 - 1 - 2 - 0 - 1
|   |   |   |   |
0 - 2 - 0 - 0 - 0
|   |   |   |   |
0 - 0 - 0 - 0 - 1


Manhattan distance
1 - source - INF - 8 -   9
|      |     |     |     |
2 -   INF -  6 -   7 -   8
|      |     |     |     |
3 -    4 -   5 -   6 -   7

Travelling Distance
1-   source- INF - INF - INF
|      |     |     |     |
2 -   INF - INF - INF - INF
|      |     |     |     |
3 -   INF - INF - INF - INF

最佳答案

可以对第二个问题使用第一个算法,但这不是必需的。

您已经提到了曼哈顿距离。您现在可以简单地计算曼哈顿距离并使用该值,而不是通过 BFS 来计算两点之间的距离。因为两点 (x1, y1), (x2, y2) 之间的曼哈顿距离只是 x1 和 x2 的绝对差加上 y1 和 y2 的绝对差,所以用这种方式计算距离要快得多。

你不能在第一个问题上使用曼哈顿距离,因为你可能会遇到这样的情况:

0 - 1 - 2 - 0 - 1
|   |   |   |   |
0 - 2 - 0 - 0 - 0
|   |   |   |   |
0 - 0 - 0 - 0 - 1

您可以轻松地看到从 (0,1) 处的建筑物到不在最右列中的任何点的行进距离与曼哈顿距离有何不同。

让我们画出从建筑物到其他所有领域的行进距离:

1 - x - + - 8 - 9
|   |   |   |   |
2 - + - 6 - 7 - 8
|   |   |   |   |
3 - 4 - 5 - 6 - 7

曼哈顿距离看起来像这样(不受障碍物影响):

1 - x - + - 2 - 3
|   |   |   |   |
2 - + - 2 - 3 - 4
|   |   |   |   |
3 - 2 - 3 - 4 - 5

关于algorithm - 这两个广度优先搜索问题有何不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44417243/

相关文章:

c++ - 未排序矩阵搜索算法

java - 有 3 个容器(2 个满的和 1 个空的)并尝试从中创建 x 数量

c - C中的这种排序算法有什么问题?

r - 使用矩阵图 (matplotlib) 作为 map ,使用位置作为位置

php - 有人知道避免两个或多个日期时间在 php 中发生冲突的算法

r - 子集非NA

algorithm - 给定一组数字和运算符,使用最少的运算次数形成给定的数字

c++ - 在简单的高峰时段求解器中使用 BFS - 为什么我的代码无法求解电路板?

javascript - 用javascript缩短大数字

javascript - 如何填充和规范化可变长度数组