最短Hamilton路径问题 ----学习笔记

本文介绍了如何利用动态规划策略解决一个旅行规划问题:从北京出发,经过多个城市,每个城市只访问一次,然后返回北京,目标是最小化旅行费用。文章详细解析了dp状态转移方程,并给出了数据范围和车票价格限制。最终,通过遍历所有可能的路径,找到最低的总花费作为解决方案。
摘要由CSDN通过智能技术生成

题目:

小明目前在做一份毕业旅行的规划。

打算从北京出发,分别去若干个城市,然后再回到北京,每个城市之间均乘坐高铁,且每个城市只去一次。

由于经费有限,希望能够通过合理的路线安排尽可能的省些路上的花销。

给定一组城市和每对城市之间的火车票的价钱,找到每个城市只访问一次并返回起点的最小车费花销。

输入格式

城市个数n。

城市间的车票价钱n行n列的矩阵 m[n][n]

输出格式

输出一个整数,表示最小车费花销。

数据范围

1<n≤201<n≤20,包括北京。
车票价格均不超过1000元。

解决思路:

dp状态 -- f( i , j )路线是i,现在在城市j的情况下,所花的钱最少的值。

i 是一个 1 ~ 2^20 之间的数,用二进制的形态记录已经走过的城市,1代表走过,0代表没走过。

计算公式为:f( i , j ) = f( i - (1 << j - 1) , k) + P( k , j ) ,

i - (1 << j - 1)表示到j之前的路径。

P( k , j )表示 k -> j 的花费。

枚举 (1 ~ 20)个 k (合法的)取最小值就是f( i , j )。

最后枚举 i = (1 << n) - 1,即所有城市均去过的情况下,当前所到城市j(1 ~ 20)回到出发城市 1 的最小值&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值