算法设计与分析:第五章 回溯法 5.1TSP之货郎担问题

本文介绍了使用回溯法解决货郎担问题,即求解从顶点1出发,最后返回顶点1的最短路线。通过递归和剪枝策略,动态更新二维数组和标记数组,寻找最小耗费路径。算法核心包括递归基和递归步,递归基判断是否到达叶子节点上一层,递归步进行子树判断并尝试所有可能的节点组合。最后展示了一段C++代码实现该算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
货郎担问题:
四个顶点的货郎担问题。求从顶点1出发,
最后回到顶点1的最短路线。
	v1		v2		v3		v4
v1	无穷	无穷	1		7
v2	8		无穷	5		1
v3	7		2		无穷	1
v4	2		5		3		无穷

算法分析:
因为是采用回溯法来做,肯定是递归,然后还需要现场清理。
要设置一个二维数组来标识矩阵内容,然后回溯还需要设计
一个二维标记数组来剪枝,设定一个目标变量,初始为无穷大, 
后续如果有比目标变量值小的就更新。剪枝的条件就是如果走到当前节点的耗费值>=目标变量,就直接不再往下面走,
向上走。

深度优先 = 递归
递归基:如果到达叶子节点的上一个节点,那么就进行是否更新的判断
递归步:如果没有到达叶子节点,就进行剪枝操作,判断能否进入下一个节点,如果能,更新最优值


输入:
4
0 0  1 7
8 0	 5 1
7 2  0 1
2 5  3 0
输出:
1 3 2 4 1
6
*/

/*
关键:
1 	//递归基:如果已经遍历到叶子节点的上一层节点,i标识递归深度
	if(i == g_n)
	{
		//判断累加和是否超过最大值,如果有0,应该排除;满足这个条件,才打印
		if((g_iArr[pArr[i-1]][pArr[i]] != 0) && (g_iArr[pArr[g_n]][1] != 0)  && 
			(g_iCurResult + g_iArr[pArr[i-1]][pArr[i]] + g_iArr[pArr[g_n]][1] < g_iResult ))
		{
			g_iResult = g_iCurResult + g_iArr[pArr[i-1]][pArr[i]] + g_iArr[pArr[g_n]][1];
			//用当前最优路径去更新最优路径,防止下一次没有
			for(int k = 1 ; k <= g_n ; k++)
			{
				g_iBestPath[k] = pArr[k];

2 	//递归步:判断能否进入子树,需要尝试每一个节点
	else
目录: 实验一 递归分析...............................................01 1.实验内容....................................................01 2.实验目的....................................................01 3.程序清单....................................................011)循环赛日程安排..........................................01 (2)最近点对核心代码........................................04 4.实验结果....................................................06 5.分析思考..................................................06 实验二 动态规划.................................................09 1.实验内容....................................................09 2.实验目的....................................................09 3.程序清单....................................................09 (1)TSP问题核心代码.................................................09 (2)0-1背包问题核心代码........................................11 4.实验结果....................................................13 5.分析思考..................................................13 实验三 贪心算法.................................................16 1.实验内容....................................................16 2.实验目的....................................................16 3.程序清单....................................................16 (1)最近邻点策略解决TSP问题.................................16 (2)多机调度问题............................................17 4.实验结果....................................................18 5.分析思考..................................................19 实验三 回溯法...................................................21 1.实验内容....................................................21 2.实验目的....................................................21 3.程序清单....................................................211解0-1背包问题........................................21 (2)TSP问题............................................22 4.实验结果....................................................23 5.分析思考..................................................24 附录: 实验二表格绘制案例说明(无监视器)...............................25 各实验题目描述
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值