爲我們實施最近鄰啓發式(我已經完成)的學校做項目,以及我們進行詳盡搜索的旅行銷售員問題(然後分析算法,它們的時間複雜度等)。我們的老師說要四處尋找代碼來使用(或修改)窮舉搜索部分,而不是像最近鄰居部分那樣對整個事物進行編程。我環顧四周,只發現與我們被指示如何執行程序無關的東西。 與使用整數的典型問題相反,我們使用的是點(x,y)。 我的目標是計算最短排列並能夠知道排列是什麼。所以我想有一個數組的數組(其中包含排列)。Java TSP排列積分
如果有人可以幫助我與詳盡的搜索,這將是很好的。
這裏是從我的代碼一些摘錄(成員變量,功能的兩個點之間計算距離,並且其中存儲所有的點):
private int x;
private int y;
private boolean visited;
public double dist(point pt){
int xdist = this.getX() - pt.getX();
int ydist = this.getY() - pt.getY();
double xsr = xdist*xdist;
double ysr = ydist*ydist;
return Math.sqrt(xsr + ysr);
}
point[] points = new point[n];
任何幫助不勝感激。
感謝您的幫助。昨天晚上在做這件事(而沒有到任何地方)的時候,我開始想,我決定今天如何實施它。這是一個相當粗糙的方法,但它不會改變這個算法是O(n!)的事實。我將按照我的points數組中的索引來排列一個單獨的整數數組,然後我將使用這些索引作爲點的排列。如果我有更多時間「更高效」地做到這一點,我會這樣做,但由於它不會改變時間複雜度,所以我會堅持下去。 – lorenzo