矩阵中的递归广度优先搜索,最快路径(每个矩阵点将花费时间)

时间:2013-12-09 22:58:51

标签: python recursion graph matrix breadth-first-search

考虑下面的这个矩阵,我应该从1个给定点(用户输入)点到另一个点(用户输入)。例如,它可能是海洋[1] [1]到海洋[2] [4]。我需要找到到端点的最短路径。现在,通过实施BFS可以很容易地解决这个问题。但在这种情况下,并非如此简单。考虑矩阵中的每个点,它们各自具有不同的值。

我要从起点到终点起航。对于矩阵中的每个点,我都有不同的风条件,这将导致船在某些点上行进得更快,而在其他点上行驶得更慢。每个点的速度,以及因此移动一个点所需的时间取决于我进入点的方向。

这意味着我只能知道在实际测试它时而不是从一开始就通过一个点的时间。

说到这里,我的目标不再是找到“最短路径”,而是最快。

还有另一个要考虑的变量。我可以在8个方向上移动,水平,横向和垂直(北,东北,东,东南等......)。水平移动是sqrt(2)移动单位,移动其他方向= 1个移动单位。

因此,计算在一个点上花费的时间,您将获得您进入该点的方向(知道您移动了多少单位)以及该点的速度(根据风况计算)。

为了找到我应该使用“递归广度优先搜索”的最快路径,这是作为指令给出的。

我知道如何编写BFS以便找到最短路径,但我真的不知道从哪里开始编写递归BFS,以及如何考虑所有变量(时间等)

有关我可以为此收集信息的任何提示吗?另外,这听起来像是一个逻辑方法来做递归BFS吗?

这是一个示例矩阵:考虑所有带有“0”的点具有不同的值(通过该点所需的时间)。

ocean =[[0,0,0,0,0,0], 

        [0,0,0,0,0,0],

        [0,0,0,0,0,0],

        [0,0,0,0,0,0],

        [0,0,0,0,0,0],

        [0,0,0,0,0,0]]

1 个答案:

答案 0 :(得分:2)

您可以将矩阵表示为图形(必要时展开节点数),然后使用Bellman-Ford找到最短路径。 我说的是最短的路径,因为如果你定义你的图形和它的节点的权重,计算最快的路径相当于计算最短的路径。

使用Bellman-Ford你也可以在节点上有负权重(例如那些可以提高你的速度的节点),否则你可以使用Dijkstra或BFS的变体来加权图。