一个售货员必须访问n个城市,这n个城市是一个完全图,售货员需要恰好访问所有城市的一次,并且回到最终的城市。 城市与城市之间有一个旅行费用,售货员希望旅行费用之和最少。 旅行商问题是np问题,一般可以使用回溯法或者动态规划解决。

class Solution:

def __init__(self, X, start_node):

self.X = X

self.start_node = start_node

self.array = [[0] * (2 ** (len(self.X) - 1)) for i in range(len(self.X))]

def transfer(self, sets):

su = 0

for s in sets:

su = su + 2 ** (s - 1)

return su

def tsp(self):

s = self.start_node

num = len(self.X)

cities = list(range(num))

cities.pop(cities.index(s))

node = s

return self.solve(node, cities)

def solve(self, node, future_sets):

if len(future_sets) == 0:

return self.X[node][self.start_node]

d = 9999999

distance = []

for i in range(len(future_sets)):

s_i = future_sets[i]

copy = future_sets[:]

copy.pop(i)

distance.append(self.X[node][s_i] + self.solve(s_i, copy))

d = min(distance)

next_one = future_sets[distance.index(d)]

c = self.transfer(future_sets)

self.array[node][c] = next_one

return d

n = int(input())

m = int(input())

D = [[9999999 for j in range(n)] for i in range(n)]

for i in range(m):

a, b, t = list(map(float, input().split()))

a,b = int(a),int(b)

D[a][b] = t

D[b][a] = t

S = Solution(D, 0)

res = int(S.tsp())

if res >= 9999999:

print(-1)

else:

print(res)

python 动态规划 旅行商问题_旅行商问题的动态规划解法相关推荐

  1. python 动态规划 旅行商问题_旅行商问题动态规划解法(python版)

    2019年华为实习生第二场笔试第二题是个旅行商问题,虽然只有5个点可以import itertools产生排列遍历5!=120情况求解(当然也可以写个递归自己生成排列),还是查了下动态规划的解法. 原 ...

  2. java 动态规划 硬币_硬币问题-动态规划详解

    基本动态规划之硬币问题 问题描述 假设有 1 元,3 元,5 元的硬币若干(无限),现在需要凑出 11 元,问如何组合才能使硬币的数量最少? 问题分析 乍看之下,我们简单的运用一下心算就能解出需要 2 ...

  3. python典型例题_经典动态规划例题整理(Python版)

    由于本人的算法基础较为薄弱,所以在这里整理一下自己的做过的题,使自己能够随时随地回顾温习. 然后,本篇文章将会持续更新自己遇到的一些比较经典动态规划的题目,大家如果对代码有任何问题,直接在文章下面评论 ...

  4. python多重背包_【动态规划】多重背包问题

    说明 前面已经介绍完了01背包和完全背包,今天介绍最后一种背包问题--多重背包. 这个背包,听起来就很麻烦的样子.别慌,只要你理解了前面的两种背包问题,拿下多重背包简直小菜一碟. 如果没有看过前两篇0 ...

  5. python 动态规划 供应链_动态经济学的python实现|(一)动态规划问题

    一.确定性的动态规划问题 考虑这样一个简单的吃蛋糕的问题:(此模型其实可以看作是RCK最优增长模型的家庭效用最大化的决策问题) 你有一个蛋糕大小是 ,每期消费量 ,当期蛋糕剩余量为 ,蛋糕效用的&qu ...

  6. 八十五、Python | Leetcode数据结构之图和动态规划算法系列

    @Author:Runsen @Date:2020/7/7 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  7. Python算法分析与设计实验:动态规划算法

    Python算法分析与设计实验:动态规划算法 一.实验目的 1.理解动态规划求解优化问题的典型步骤,以及动态规划算法求解计算问题的时间复杂度分析 2.熟练掌握利用动态规划算法求解一维.二维等典型优化问 ...

  8. 用递归与分治策略求解网球循环赛日程表_分治、动态规划、回溯、贪心一锅炖

    「观感度:五颗星」 「口味:东北一锅出」 「烹饪时间:10min」 本文已收录在 Github github.com/Geekhyt,感谢Star. 数据结构与算法系列专栏第四弹来袭,往期专栏链接如下 ...

  9. Python 实例教学_ 03_列表

    Python 实例教程 Python 实例教学_ 03_列表 第十三课 [844. 比较含退格的字符串](https://leetcode.cn/problems/backspace-string-c ...

最新文章

  1. Elasticsearch——Rest API中的常用用法
  2. 手握173篇论文的学术新星被指造假!后续:博士论文被召回
  3. apache用proxy 实现URL 转发
  4. seaborn系列 (15) | 双变量关系图jointplot()
  5. Android 中 Behavior, NestedScrollingParent, NestedScrollingChild 关系
  6. 访问IIS元数据库失败
  7. 【译】Jumping into Solidity — The ERC721 Standard (Part 2)
  8. 1.1节 Buck Converter--降压转换器 part1
  9. powerbi导入地图_Power BI系列教程之powerBI功能介绍及使用导引(一)
  10. mysql for update_mysql SELECT FOR UPDATE语句使用示例
  11. 20万RMB!学数据分析的朋友一定要看!
  12. 虚拟机卸载ubuntu安装mysql_ubuntu 卸载与安装mysql
  13. PyQt5系列(四)Mac10.12上安装Cocoapods
  14. 使用shell编写九九乘法表,mysql分库备份
  15. csv文件转换成utf-8格式乱码
  16. linux wav 转mp3,linux下wav转换为mp3
  17. 播放.avi后缀视频报出0xc00d5212,编码格式不支持
  18. MT-考试座位-颜色排序
  19. 2022-03-13-Redis
  20. 私钥,公钥的区分——私钥公钥讲解

热门文章

  1. matlab中 y =ft(x)的意思,matlab中y=fft(x)语句的意思
  2. 香港大学一实验室突发爆炸!博士生操作失当致另一博士生面部严重灼伤
  3. 蓝桥杯每日一练——礼物 python
  4. [终端_1]-Xshell 5 最火的终端软件!
  5. Ubuntu—自启服务搭建一个文件服务器
  6. 网页406错误及原因
  7. 画笔与画刷(pen and brush)
  8. Windows下载安装MySQL及相关配置教程
  9. 多媒体系统是指利用计算机技术和什么技术,四川自考07311《多媒体技术》全真模拟试题(一)...
  10. Cardboard虚拟现实开发初步(一)