我有一个带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),但我不知道如何走这条路。 一些想法或伪代码? 谢谢!
答案 0 :(得分:0)
实际上它非常简单:
存储"前身"每个节点。无论是在另一个矩阵中,嵌入到原始地图中,还是Map
。如果它是双向的,即使树结构也会起作用。
没有代码,我无法向您展示可能的解决方案,但最终,您需要的只是映射node -> node from which it was visited
。例如。在您的示例中,您从(1, 1)
移至(2, 1)
,因此映射将为(2, 1)->(1, 1)
。这可以很容易地在BFS例程中实现。
完成运行算法,同时填充映射。之后,您可以通过搜索结束节点的前任,然后搜索结束节点的前任的前任,等等,直到您回到起始点。