分支限界法 旅行售貨員問題

2022-09-06 10:03:09 字數 2421 閱讀 6609

1 n: int = 4

2 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...