查找图表中所有所需点的最短路径

时间:2013-01-12 12:10:54

标签: graph shortest-path breadth-first-search

在接受采访时我被问到以下问题

  

您将获得一个4 X 4网格。网格上的某些位置包含   宝藏。您的任务是访问包含该位置的所有位置   珍惜并收集它。你被允许在相邻的四个上移动   细胞(上,下,左,右)。每一个动作和动作   “珍藏”是一个单位成本。你需要遍历   整个网格,并收集网格上的所有宝藏,最小化   所花费的成本。

如果我能够正确回忆,这里有一个示例图表:

U..X
..X.
X..X
..X.

其中,U是我当前的位置,X标志着宝藏的位置。

我提出的解决方案是使用广度优先搜索遍历图表并“收集宝藏”,同时这样做。然而,采访者坚持认为有更好的方法来降低成本。我希望你能帮助我搞清楚。

2 个答案:

答案 0 :(得分:3)

你应该已经认识到这是一个小型伪装的旅行推销员问题。使用广度优先,您可以确定您必须访问的不同顶点之间的最短路径,这将为您提供一个派生图形,其中仅包含这些方式作为顶点之间的加权边缘。从那时起,它就是一款经典的TSP。

答案 1 :(得分:3)

BFS本身不会为你解决,因为你不能同时向所有方向移动。这不是单一来源的最短路径问题,因为一旦你收集了宝藏,你就会从当前的地点开始你的下一条路径,而不是从原始地点开始。

收集所有宝藏所需的时间取决于您使用X访问复选框的顺序。由于只有五个,你可以尝试所有120个订单,计算成本,并选择最好的。

请注意,如果订单是固定的,那么解决方案很简单:您按顺序在单元格之间添加manhattan distances,然后选择最小的结果。