这两个广度优先搜索问题如何彼此不同

时间:2017-06-07 15:42:34

标签: 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

1 个答案:

答案 0 :(得分:2)

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

你已经提到了曼哈顿距离。您现在可以简单地计算曼哈顿距离并使用此值,而不是使用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