算法设计与分析:第四章 动态规划 4.2TSP之货郎担问题

本文探讨了使用动态规划解决旅行商问题(TSP)的一个变种——货郎担问题。通过邻接矩阵表示城市之间的距离,并介绍了动态规划的思路,包括状态定义、递归公式和边界条件。文章提供了C语言实现的记忆化搜索算法,以找到从特定起点出发,经过所有城市一次并返回的最短路径长度。
摘要由CSDN通过智能技术生成
/*
如果对于任意数目的n个城市,分别用1~n编
号,则这个问题归结为在有向带权图中,寻找一
条路径最短的哈密尔顿回路问题。
这里,V表示城市顶点,(i,j) ∈E 表示城市之
间的距离,用邻接矩阵C表示城市之间的距离。


思想:
1设d(i,V-{i})表示从顶点i出发,经过V-{i}中各顶点一次,回到顶点i的最短路径长度
2d(i,V-{i}) = d(i,|V) = k属于V min{Cik,d(i,!V - {k})}
3边界:d(k,空集) = Cki,k!= i,从顶点k出发,不经过任何顶点,回到顶点i的长度,自然是Cki
4目标状态:d(0,{1,2,3})

难点:如何标识这个集合V,难道用标记法,这是集合上的动态规划问题,可以通过位来进行操作
0001表示第i个节点选中
那初始时:1111...1110
			n-1个1 1个0

输入说明:0标识不可达
输入:
4
0 3 6 7
5 0 2 3
6 4 0 2
3 7 5 0

4
0 8 5 6
6 0 8 5
7 9 0 5
9 7 8 0

输出:
10
23

难点:
1到底递归求的是什么?
分析即所得,求的是集合
求的是:d(i,V-{i}) = d(iStart,iFull - (1<<iStart) )
2递归传入的参数是什么?
iSart,初始节点,除去初始节点的剩余节点集合,为一个数
3递归基是什么?
递归基是:如果碰到已经求过的,则直接返回;碰到i != g_iStart && s == 0,返回g_dp[i][s] = g_iArr[i][g_iStart];
4如何挑选k?
	for(int k = 0 ; 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值