有一个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的最小值,有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
这是Traveling Salesman Problem的变体,NP-Complete(这意味着没有已知的有效解决方案,大多数人认为这种解决方案不存在)。
小矩阵的可能解决方案:
主题:Find the shortest path between a given source and a set of destinations处理上述说明中的步骤2 + 3以及更多细节。
但是,如果您没有提及额外的限制(例如,只能向下和向右移动),您的基础图实际上是Directed Acyclic Graph,您可以更有效地解决它。