我有一个以点对象作为输入的数组。我想对这些点进行排序,得到一个包含所有点的最短路径的数组。这是到目前为止我的代码,但我还没有弄清楚,一旦点被使用,如何删除它们。
public Point[] poiSort(Point[] poi){
poi = new Point[lenght+1];
poi[0] = points[0];
distances = new Double[lenght];
double Distance = verybignumber;
double Distancecompare;
for (int i = 1; i < leght+1; i++){
for (int j = 1; j < (lenght); j++){
Distancecompare = points[i-1].getDistance(points[j]);
if (Distance > Distancecompare){
Distance = Distancecompare;
poi[i] = points[j];
distances[i-1] = Disstance;
}
}
}
return poi;
}
2条答案
按热度按时间mwkjh3gx1#
您可以在排序期间构建一个新数组,并将其作为结果返回。这样您就不需要删除元素。或者,您可以使用arraylist或treeset以获得更大的灵活性。这里有一个可能不是很优雅,但可以使用阵列的示例:
3mpgtkmj2#
你显然想解决的问题毫无意义。
或者至少。。。子问题没有。
如果你有
N
点,则它们之间的成对距离数为(N-1)^2
. 对于每个给定点p,有N - 1
到其他点的距离。不能基于此为点定义相关/易于计算的顺序。所以排序没有意义。你可以做的是取一个点,然后根据到该点的距离对其他点排序。但这意味着,对于总共n个点,您有n个单独的订单。
请注意,您在这里试图解决的是一种形式的“旅行推销员1问题”(tsp)。tsp在数学上被证明是np完全的。这应该告诉您,尝试通过排序来解决它(这是
O(NlogN)
)不工作。我的建议是:
读一些关于tsp的书,以及为什么它很难
尽量避免找到问题的精确解决方案
看看寻找近似解的技术/算法。。。而不是试图发明自己的算法。
查找现有的库。
1-或“旅行推销员问题”。不,我不是开玩笑。