在接受采访时我被问到以下问题
您将获得一个4 X 4网格。网格上的某些位置包含 宝藏。您的任务是访问包含该位置的所有位置 珍惜并收集它。你被允许在相邻的四个上移动 细胞(上,下,左,右)。每一个动作和动作 “珍藏”是一个单位成本。你需要遍历 整个网格,并收集网格上的所有宝藏,最小化 所花费的成本。
如果我能够正确回忆,这里有一个示例图表:
U..X
..X.
X..X
..X.
其中,U是我当前的位置,X标志着宝藏的位置。
我提出的解决方案是使用广度优先搜索遍历图表并“收集宝藏”,同时这样做。然而,采访者坚持认为有更好的方法来降低成本。我希望你能帮助我搞清楚。
答案 0 :(得分:3)
你应该已经认识到这是一个小型伪装的旅行推销员问题。使用广度优先,您可以确定您必须访问的不同顶点之间的最短路径,这将为您提供一个派生图形,其中仅包含这些方式作为顶点之间的加权边缘。从那时起,它就是一款经典的TSP。
答案 1 :(得分:3)
BFS本身不会为你解决,因为你不能同时向所有方向移动。这不是单一来源的最短路径问题,因为一旦你收集了宝藏,你就会从当前的地点开始你的下一条路径,而不是从原始地点开始。
收集所有宝藏所需的时间取决于您使用X
访问复选框的顺序。由于只有五个,你可以尝试所有120个订单,计算成本,并选择最好的。
请注意,如果订单是固定的,那么解决方案很简单:您按顺序在单元格之间添加manhattan distances,然后选择最小的结果。