当前位置: 首页 > news >正文

广州番禺建网站/今日武汉最新消息

广州番禺建网站,今日武汉最新消息,徐州建设工程交易信息网,帝国cms 做的完整的网站有没有问题描述:小明目前在做一份毕业旅行的规划。打算从北京出发,分别去若干个城市,然后再回到北京,每个城市之间均乘坐高铁,且每个城市只去一次。由于经费有限,希望能够通过合理的路线安排尽可能的省一些路上的…

问题描述:小明目前在做一份毕业旅行的规划。打算从北京出发,分别去若干个城市,然后再回到北京,每个城市之间均乘坐高铁,且每个城市只去一次。由于经费有限,希望能够通过合理的路线安排尽可能的省一些路上的花销。给定一组城市和每对城市之间的火车票的价钱,找到每个城市只访问一次并返回起点的最小车费花销。输入城市个数n,城市间的车票价钱,n行n列的矩阵。

思路扩展:通常解决tsp问题的办法就是动态规划DP,DP通常用于解决具有最优性质的问题,其基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后由这些子问题的解再得到原问题的解。

补充:用二进制串表示集合,比如集合{1,3,5,6,7}表示成二进制串是1110101,其中集合里面有的数对应的位数写成1,没有的写成0.要判断第三位是不是1,就把1110101右移(3-1)位,得到11101,然后结果和00001进行&运算,如果结果是1说明第三位是1,否则说明第三位是0。所以,对于数字x,要看他的第i位是不是1,那么可以通过判断布尔表达式(((x>>(i-1)))&1)==1的真值来实现。

解题思路:

实际上就是一个旅行商的问题,假设输入的n为3,那么将要去的城市写成集合{1,2,3},表示经过【1,2,3】,将北京作为出发点0,那么最终的求解就是dp[0][{1,2,3}.]将{1,2,3}表示为二进制就是111,111对应的10进制是7,所以求解目标就是dp[0][7].

dp[0][{1,2,3}]=min{C01+dp[1][{2,3}],C02+dp[2][{1,3}},C03+dp[3][{1,2}]},其中C01表示从0出发到1的距离。

dp[1][{2,3}] = min{ C12+dp[2][{3}] ,C13+dp[3][{1}]}

dp[2][{3}] = C23+dp[3][{}]

dp[3][{}]就是从3出发,不经过任何城市,回到0的花费,所以dp[3][{}] = C30

dp表的大小,行数是n个城市,列数是集合n的子集个数2^(n-1).

dp[2][5],先将5转换为二进制101,则dp[2][5]表示从2出发,经过{1,3},最后回到起点,那么:

dp[2][5]=min{C21+dp[1][{3}],C23+dp[3][{1}]},将dp中的城市转换为二进制表示再转换为十进制{3}-100-4,即

=min{C21+dp[1][4],C23+dp[3][1]}

从2出发,要去{1,3},步骤:

  1.先看去1的路,去了1集合{1,3}中只剩下{3} ,{3}对应4,所以要求的dp表就是dp[1][4],这个4可以通过(101) ^ (1)得到,(1) = 1<<(1-1)

  2.再看去2的路,5 = 101的第二位是0,所以不能去2。判断第二位为1,用(5>>(2-1)) &1==1。而且也由于从2出发,就更不能去了。

  3.最后看去3的路,去了3集合{1,3}中只剩下{1},{1}对应这1,所以要求的dp表就是dp[3][1],1通过(101) ^ (100)得到。(100) = 1<<(3-1)

python代码如下:

def tsp( matrix):m, n = len(matrix) * len(matrix), len(matrix)# 状态压缩DP,5表示0101,dp[i][j]表示从0出发,经过i中的几个到达j,要求i中有jdp = [[float('inf')] * n for _ in range(m)]dp[1][0] = 0for i in range(1, m):if not (i & 1):  # i中不能包括0,不能从0出发continuefor j in range(1, n):  # j是要加入的if i & (1 << j):  # 如果i中包括j就重复了continuefor k in range(n):if i & (1 << k):  # 如果i中包括k# i中加上j,0到j的最短距离可能为原来i中任何一个k到j的距离与剩余最短距离之和dp[(1 << j) | i][j] = min(dp[(1 << j) | i][j], dp[i][k] + matrix[k][j])res = float('inf')# 最后还要回到0for i in range(n):res = min(res, dp[m - 1][i] + matrix[i][0])return resn=int(input())
martix=[]
for i in range(n):arr=list(map(int,input().split()))martix.append(arr)
print(tsp(martix))

 

http://www.lbrq.cn/news/2342251.html

相关文章:

  • 网站建设荣茂/出词
  • 建设网站的企业名称/搜索引擎营销总结
  • 外国人做中国英语视频网站/子域名查询工具
  • 微信3g网站开发教程/2020年可用好用的搜索引擎
  • 免费域名网站黄/百度关键词热搜
  • 广州科技网站建设/旺道营销软件
  • 本地网站建设视频/网站关键词如何优化上首页
  • 网站开发所需/seo最新优化技术
  • 做网站怎么建站点/百度知道在线
  • 房地产建设网站/想学编程去哪里找培训班
  • 对接公众号的网站怎么做/推广普通话内容50字
  • 潍坊专业捞泵电话/关键词优化seo费用
  • 萍乡手机网站建设/今天发生的重大新闻
  • 网上做兼职网站有哪些/培训网
  • 做盗版电影网站问题/网络营销论文5000字
  • 在线做简单的网站/公司网站设计图
  • 网站工程前端/厦门网站seo哪家好
  • 沈阳营销型网站/滨州网站seo
  • 阳江网站制作公司/广西壮族自治区
  • 网站建设哪个软件好/优化推广网站怎么做
  • 做数学题好的网站/如何做好网络推广工作
  • 只做正品的网站/徐州seo顾问
  • 自己做商务网站有什么利弊/百度平台商户电话号码
  • 免费网站建设的/seo实战培训费用
  • 17素材网下载/宁波seo服务推广
  • 网站付费推广方式/经营管理培训课程
  • dw个人网站主页怎么做/海南seo排名优化公司
  • 做英语网站/网站域名查询官网
  • 网站开发 项目的招标文件/广东: 确保科学精准高效推进疫情
  • 前端做网站是什么流程/什么是全网营销推广
  • 042_封装的实现(属性私有化 / 方法公开)
  • 分块(chunked) vs 滑动窗口(windowed)
  • 深入探讨Hadoop YARN Federation:架构设计与实践应用
  • 渭河SQL题库-- 来自渭河数据分析
  • 分布式通信框架 - JGroups
  • 卷积模型的优化--Dropout、批标准化与学习率衰减