旅行推销员布尔矩阵

时间:2016-09-10 17:10:28

标签: shortest-path traveling-salesman minimum-spanning-tree

我正在寻找关于如何解决这个问题的一些建议。 您将获得1和0的二进制矩阵,目标是找到每1次访问的最短路径。 例如:
1 0 0 0
0 0 1 0
1 0 1 1
0 0 0 1
访问所有人的最短路径(我认为)是这样的:
1 0 0 0
0 0 1 0
1 0 1 1
0 0 0 1
在任何情况下,我认为这是一个旅行推销员类型的问题或可能是最小的生成树。但是,我完全不确定如何开始。这不是典型的图搜索,因为您在技术上没有邻居或成本,并且没有预定义的起始节点;你可以在任何位置开始或结束。有没有人有什么建议?非常感谢你。

1 个答案:

答案 0 :(得分:0)

这是一个TSP。将节点集V定义为矩阵中的1的集合。将d(i,j)中的ij之间的距离V定义为矩阵内的距离。如果我正确理解你的例子,你可以只在矩阵中垂直或水平“移动”。所以d(i,j) = |i_x - j_x| + |i_y - j_y|,其中(i_x,i_y)是节点i的坐标(行号和列号),j也是如此。 (这也称为曼哈顿度量,直线度量或L1范数。)

看起来你想要一条路而不是一条路 - 从任何地方开始到任何地方结束。经典TSP假设您在同一节点开始和结束。简单修复:创建一个虚拟节点,并将虚拟节点与/从任何其他节点的距离设置为0.然后在最佳TSP游览中忽略与虚拟节点的边缘。