从一个点到一个点获得有效的道路(矩阵上的BFS)

时间:2016-11-01 14:11:05

标签: java matrix shortest-path breadth-first-search

我有一个带0和X的矩阵(0表示你可以走过,X表示墙)。 我有一个起点和一个终点。 我使用BFS找到开始和结束之间的最短路径(长度)。 (有用) 但现在我需要找到有效的道路而且我不知道该怎么做。 (我以为我可以使用Lee算法递归)。

Example:

5 5 
SXXXF 
0XX00 
0XX0X 
0000X 
XXXXX

长度为8,道路为:(1,1) - > (2,1) - > (3,1) - >(4,2) - > (4,3) - > (3,4) - > (2,4) - > (1,5)。 我有8个方向。

所以,我用BFS来获取长度(8),但我不知道如何走这条路。 一些想法或伪代码? 谢谢!

1 个答案:

答案 0 :(得分:0)

实际上它非常简单:   存储"前身"每个节点。无论是在另一个矩阵中,嵌入到原始地图中,还是Map。如果它是双向的,即使树结构也会起作用。

没有代码,我无法向您展示可能的解决方案,但最终,您需要的只是映射node -> node from which it was visited。例如。在您的示例中,您从(1, 1)移至(2, 1),因此映射将为(2, 1)->(1, 1)。这可以很容易地在BFS例程中实现。

完成运行算法,同时填充映射。之后,您可以通过搜索结束节点的前任,然后搜索结束节点的前任的前任,等等,直到您回到起始点。