2012-04-15 87 views
1

我有這個要求: 我有一個點的列表,併爲每個這些我有X,Y座標。從點列表的最佳路徑C++

我的目標是找到這些點之間的最佳路徑(我必須使用所有點)。 例如:

A(XA,YA),B(XB,YB),C(XC,YC),d(XD,YD),E(X,Y) 我使用歐幾里德計算兩點

我的最優路徑之間的距離例如:d,E,A,C,B

我該怎麼做呢?

回答

3

您正在描述一個被稱爲Traveling Salesman ProblemNP-Hard問題。

沒有已知的多項式解決方案這個問題,但有一些啓發式的,它是在多項式時間運行,但不能保證找到最佳路徑。

如果您想要最優化 - 可能需要一個brute force search

+0

值得指出的是,雖然TSP是NP難度的,因此可能無法保證找到最佳解決方案,但它也是在實踐中很好解決的NP難題之一。有很好的啓發式方法(例如谷歌的「迭代lin-kernighan」),即使有數萬個點,通常也可以快速找到最優化百分比的解決方案。 – deong 2012-04-15 11:15:14

0

問題確實是NP-Hard,但對於在歐幾里得空間中有點並且使用歐幾里得度量來測量距離的特殊情況,存在可以任意接近最優解的多項式時間逼近方案。查看this論文(歐幾里德旅行推銷員問題的一個比較着名的近似算法)。