1 n: int = 42 max_weight: int = 4000
3 no_path: int = -1
4 city_graph = [[int('
0')] * (n+1) for _ in range(n+1)] #
初始化dp
5 x = [int('
0') * (n+1) for _ in range(n+1)] #
儲存第i步便利的城市
6 isin = [int('
0') * (n+1) for _ in range(n+1)] #
儲存城市i是否已加入路徑
7 bestx = [int('
0') * (n+1) for _ in range(n+1)] #
最優路徑89
10def
tr**el_backtrack(t: int):
11global
bestw, cw
12if t > n: #
走完了,輸出結果
13for i in range(1, n+1): #
輸出當前路徑
14print(x[i], end="")
15print
()16
if cw 17for i in range(1, n + 1):
18 bestx[i] =x[i]
19 bestw =cw
20return
21else:22
for j in range(1, n+1):
23if city_graph[x[t - 1]][j] != no_path and (not isin[j]): #
能到而且沒有加入到路徑中
24 isin[j] = 1
25 x[t] =j
26 cw = cw + city_graph[x[t - 1]][j]
27 tr**el_backtrack(t+1)
28 isin[j] =0
29 x[t] =0
30 cw = cw - city_graph[x[t - 1]][j]
3132
33if
__name__ == '
__main__':
34 city_graph[1][1] =no_path
35 city_graph[1][2] = 30
36 city_graph[1][3] = 6
37 city_graph[1][4] = 4
3839 city_graph[2][1] = 30
40 city_graph[2][2] =no_path
41 city_graph[2][3] = 5
42 city_graph[2][4] = 10
4344 city_graph[3][1] = 6
45 city_graph[3][2] = 5
46 city_graph[3][3] =no_path
47 city_graph[3][4] = 20
4849 city_graph[4][1] = 4
50 city_graph[4][2] = 10
51 city_graph[4][3] = 20
52 city_graph[4][4] =no_path53#
print(city_graph)
54for i in range(1, n+1):
55 x[i] =0
56 bestx[i] =0
57 isin[i] =0
58 x[1] = 1 #
第一步走城市1
59 isin[1] = 1 #
第乙個城市加入路徑
60 bestw = max_weight #
最優路徑總權值
61 cw = 0 #
當前路徑總權值
6263 tr**el_backtrack(2) #
從第二步開始選擇城市
64print("
最優值為
", bestw)
65print("
最優解為:")
66for i in range(1, n+1):
67print(bestx[i], end="")
68print()
分支限界法 旅行售貨員問題
一 問題描述 某售貨員要到若干城市去推銷商品,已知各城市之間的路程 或旅費 他要選定一條從駐地出發,經過每個城市一次,最後回到駐地的路線,使總的路程 或總旅費 最小。如下圖 1,2,3,4 四個城市及其路線費用圖,任意兩個城市之間不一定都有路可達。二 問題理解 1.分支限界法利用的是廣度優先搜尋和最...
分支與限界 旅行售貨員問題
問題描述 演算法設計 演算法分析 應用舉例 實驗結果 類似於回溯法,也是一種在問題的解空間樹t上搜尋問題解的演算法。但在一般情況下,分支限界法與回溯法的求解目標不同。回溯法的求解目標是找出t中滿足約束條件的所有解,而分支限界法的求解目標則是找出滿足約束條件的乙個解,或是在滿足約束條件的解中找出使某一...
旅行售貨員問題 回溯法
某售貨員要到若干城市去推銷商品,已知各城市之間的路程,他要選定一條從駐地出發,經過每個城市一遍,最後回到住地的路線,使總的路程最短。結果為 1 3 2 4 1 回溯法,序列樹,假設起點為 1。演算法開始時 x 1,2,3,n x 1 n 有兩重含義 x 1 i 代表前 i 步按順序走過的城市,x i...