TSP問題的動態規劃解法(c 實現)

2021-06-14 23:35:21 字數 2359 閱讀 7740

之前演算法課的作業:

某推銷員要從城市 v1 出發,訪問其它城市 v2,v3,…,v6 各一次且僅一次,最後返回 v1。d

為各城市間的距離矩陣。

問:該推銷員應如何選擇路線,才能使總的行程最短?

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace homework1_tsp

result.add(tmp);

flag = false;

}temp[i]++;

if (temp[i] == n)

if (i < m - 1)

flag = true;

}return result;

}class valueandpath //儲存各階段的最小距離和最優路徑

public string path

public valueandpath()

public valueandpath(int v, string s)

}class statusvariable : iequatable//狀態變數 當前所在的城市i 和未訪問的城市s[k]

public listunvistedcities

public bool equals(statusvariable status) //為dictionary 重寫equal和gethashcode

public statusvariable(int currentcity, listunvistedcities)

}public static void getshortestpath(int[,] distance_matrix) //輸入距離矩陣

},new dictionary() },

new dictionary() },

new dictionary() },

new dictionary() },

};//各階段求得的不同路徑的最小距離即fk

var distance = new dictionary() ;

for (int i = 1; i <= m ; ++i) //首先計算k=6時的不同路徑的最小距離

);var value_tmp = new valueandpath(distance_matrix[i, 0], "--" + (i+1).tostring() + "--1");

distance.add(status_tmp, value_tmp);

console.writeline(value_tmp.path + " "+value_tmp.value);

}thebestpath.add(distance);

distance = new dictionary();

for (int k = m - 1; k >=0; k--)//逆序求解k=5,4,3,2,1時不同路徑的最小距離

;if(k!=0)

cities.remove(i);

list> allsubset = combine(cities, cities.count(), m - k); //獲得k階段當前城市為i時,所有未訪問的城市集合s[k]

for (int index = 0; index < allsubset.count(); index++) //計算k階段當前城市為i時,不同s[k]的最小距離

;//計算不同狀態下fk(xk)的最小值

valueandpath temp = new valueandpath();

temp.value = distance_matrix[i,allsubset[index][j]] + thebestpath[k + 1][status_old].value;

temp.path = thebestpath[k + 1][status_old].path;

status_old.unvistedcities = new list(allsubset[index].toarray());

//某一狀態下,如果當前決策的值小於上一次決策的,則更新fk(xk),否則不處理

if (temp.value < thebestpath[k][status_new].value)}}

} }}

static void main(string args),,

,,,};

getshortestpath(m);

console.writeline("press any key to exit");

console.readkey();}}

}

TSP問題 動態規劃實現

貨郎擔問題 tsp 有n個城市,兩兩之間均有路直接連線,求一條經過每個城市一次且僅一次,最後返回起點的最短路線。這是劉汝佳書上的一道題,他給出了思路,我實現了一下。用動態規劃解決,可以假設從0點出發,然後回到0點。那麼用 f i,s 表示現在處在i點,要去訪問剩餘的在集合s中的點,集合s可以用二進位...

動態規劃解決TSP問題

題目描述 某推銷員要從城市 v1 出發,訪問其它城市v2,v3,v6 各一次且僅一次,最後返回v1。d為各城市間的距離矩陣。問 該推銷員應如何選擇路線,才能使總的行程最短?int d node number node number 每個點之間距離的矩陣 int path 6 6 行表示走到第幾步,列...

動態規劃法求解TSP問題 C

此文章借鑑於博文在此基礎上重新進行了分析總結。1 怎麼求頂點子集,即這些怎麼記錄?答 例如4個頂點,依次為 十進位制數0 1 2 3 4 5 6 7的二進位制分別為000 001 010 011 100 101 110 111。上述集合中的元素即為二進位制中的位數,例如集合,可用二進位制110 十進...