求解矩阵的算法

时间:2015-03-12 18:00:34

标签: algorithm data-structures

有一个N * N矩阵,例如,我们可以采用3 * 3矩阵,

3 6 5 9
4 5 0 8
8 7 9 0
3 4 0 1 

问题是通过传递最小数量来遍历给定矩阵中的所有'0'。例如,如果我们从3(1,1)开始,我们可以通过(1,1) - >>到达(2,3)。 (1,2) - > (2,3)但我们必须采取的方式(1,1) - >(2,2) - > (2,3)。因为我们必须在路径中使用最小重量。 (第一种情况下为3 + 6重量,第二种情况下为3 + 5重量)。

我们设计了一种算法来遍历路径中权重最小的所有0。

我的算法: 1.标记给定矩阵中的所有0并计数。 2. BFS循环:从任何节点引入BFS以达到0。一旦找到0,就退出循环。

但路径的重量应该是找到0的最小值,有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

这是Traveling Salesman Problem的变体,NP-Complete(这意味着没有已知的有效解决方案,大多数人认为这种解决方案不存在)。

小矩阵的可能解决方案:

  • 将矩阵表示为加权图,其中顶点是单元格 并且边缘是可能从两个单元移动,重量为 目标细胞的价值。
  • 根据Floyd-Warshall的重量,您可以使用Floyd-Warshall algorithm找到所有到最短的路径,并创建一个仅包含零的图形,以及从每个零点移动到另一个零点的权重。
  • 使用TSP解算器(一个天真的解决方案是生成所有排列,并选择最好的排列)

主题:Find the shortest path between a given source and a set of destinations处理上述说明中的步骤2 + 3以及更多细节。


但是,如果您没有提及额外的限制(例如,只能向下和向右移动),您的基础图实际上是Directed Acyclic Graph,您可以更有效地解决它。