我是一名初學者,我正嘗試使用動態編程方法編寫一個工作中的旅行推銷員問題。Java中TSP的動態編程方法
這是我的計算功能代碼:代碼不給我正確答案
public static int compute(int[] unvisitedSet, int dest) {
if (unvisitedSet.length == 1)
return distMtx[dest][unvisitedSet[0]];
int[] newSet = new int[unvisitedSet.length-1];
int distMin = Integer.MAX_VALUE;
for (int i = 0; i < unvisitedSet.length; i++) {
for (int j = 0; j < newSet.length; j++) {
if (j < i) newSet[j] = unvisitedSet[j];
else newSet[j] = unvisitedSet[j+1];
}
int distCur;
if (distMtx[dest][unvisitedSet[i]] != -1) {
distCur = compute(newSet, unvisitedSet[i]) + distMtx[unvisitedSet[i]][dest];
if (distMin > distCur)
distMin = distCur;
}
else {
System.out.println("No path between " + dest + " and " + unvisitedSet[i]);
}
}
return distMin;
}
,我試圖找出其中的錯誤發生。我認爲我的錯誤發生時,我補充說: distCur = compute(newSet, unvisitedSet[i]) + distMtx[unvisitedSet[i]][dest];
所以我一直在搞亂那部分,移動除了最後我還沒有返回distMin
等......但我無法弄清楚。
儘管我確定它可以從代碼中推斷出來,但我會說明以下事實以澄清。
distMtx
存儲所有的城際距離,距離是對稱的,這意味着如果從城市A到城市B的距離是3,那麼從城市B到城市A的距離也是3.另外,如果兩個城市沒有任何直接路徑,距離值是-1。
任何幫助將非常感謝! 謝謝!
編輯:
主函數讀取文本文件中的城際距離。因爲我假設城市數量總是少於100個,所以全局int變量distMtx
是[100] [100]。
一旦矩陣填充了必要的信息,就會創建一個包含所有城市的數組。城市的名字基本上是數字。所以如果我有4個城市,set[4] = {0, 1, 2, 3}
。
在主功能,創建distMtx
和set
後,到compute()
第一呼叫被稱爲:
int optRoute = compute(set, 0);
System.out.println(optRoute);
樣品輸入:
-1 3 2 7
3 -1 10 1
2 10 -1 4
7 1 4 -1
預期輸出:
10
您能否添加一些關於您如何運行程序的信息?還要添加輸入和預期的輸出。 – reos