zoukankan      html  css  js  c++  java
  • 分支限界法---旅行售货员问题

     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)]  # 最优路径
     8 
     9 
    10 def Travel_Backtrack(t: int):
    11     global bestw, cw
    12     if t > N:  # 走完了,输出结果
    13         for i in range(1, N+1):  # 输出当前路径
    14             print(x[i], end=" ")
    15         print()
    16         if cw < bestw:
    17             for i in range(1, N + 1):
    18                 bestx[i] = x[i]
    19             bestw = cw
    20         return
    21     else:
    22         for j in range(1, N+1):
    23             if 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                 Travel_Backtrack(t+1)
    28                 isIn[j] = 0
    29                 x[t] = 0
    30                 cw = cw - City_Graph[x[t - 1]][j]
    31 
    32 
    33 if __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
    38 
    39     City_Graph[2][1] = 30
    40     City_Graph[2][2] = NO_PATH
    41     City_Graph[2][3] = 5
    42     City_Graph[2][4] = 10
    43 
    44     City_Graph[3][1] = 6
    45     City_Graph[3][2] = 5
    46     City_Graph[3][3] = NO_PATH
    47     City_Graph[3][4] = 20
    48 
    49     City_Graph[4][1] = 4
    50     City_Graph[4][2] = 10
    51     City_Graph[4][3] = 20
    52     City_Graph[4][4] = NO_PATH
    53     # print(City_Graph)
    54     for 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  # 当前路径总权值
    62 
    63     Travel_Backtrack(2)  # 从第二步开始选择城市
    64     print("最优值为", bestw)
    65     print("最优解为:")
    66     for i in range(1, N+1):
    67         print(bestx[i], end=" ")
    68     print()
  • 相关阅读:
    Mac下启动Apache
    Mac OS X中配置Apache
    catransition type
    Block
    mysql 复制表结构和表数据的区别 like 和 select
    mysql kill掉所有的锁表的进程 未验证
    MySQL所有函数及操作符
    linux各种复制命令
    Mac mysql 导入导出数据库
    数据库总结
  • 原文地址:https://www.cnblogs.com/je-ho/p/10155907.html
Copyright © 2011-2022 走看看