7-2 TSP问题 给出一个n个顶点的带权无向图,请寻找一条从顶点1出发,遍历其余顶点一次且仅一次、最后回到顶点1的最小成本的回路——即最短Hamilton回路。 输入格式: 第一行,两个正整数 n 和 e ,0 < n ≤ 21 ,n < e < n×n/2 ,表示该无向图的顶点个数,以及边的数量。顶点编号是1~n 第二行至e+1行,每行3个非负整数 u , v 和 w ,分别表示顶点u与顶点v之间有一条边,其权值为w 。 输出格式: 如果存在Hamilton回路,请输出回路的路径长度。 如果不存在Hamilton回路,请输出“ no Hamilton circuit”(不包含引号)
时间: 2024-04-04 14:31:32 浏览: 123
带权图的多种算法(有向图,无向图,Dijkstra算法,到每个顶点的最短距离算法,佛洛依德算法(Floyd),找出每对顶点的最短路径,带权重无向图最小生成树,prim算法,Kruskal算法求最小生成树)java实现,有注释
5星 · 资源好评率100%
这是一个经典的旅行商问题(TSP)的变种,可以使用动态规划来解决。
首先定义状态:$f[S][i]$ 表示当前已经经过的顶点集合为 $S$,最后一个经过的顶点为 $i$ 时,从 1 出发遍历完集合 $S$ 中所有顶点,最后回到 1 的最小成本。
然后考虑状态转移:假设当前状态为 $f[S][i]$,我们需要找到一个顶点 $j$,使得从 $j$ 出发可以到达 $i$,且 $j \notin S$。那么状态转移方程为:
$$f[S\cup \{i\}][i] = \min_{j=1}^n \{f[S][j]+w_{ji}\}$$
其中 $w_{ji}$ 表示从顶点 $j$ 到顶点 $i$ 的边权值。需要注意的是,如果 $j$ 无法到达 $i$,则 $w_{ji}$ 应该为无穷大。
最终的答案为 $f[\{1,2,\cdots,n\}][1]$,表示从 1 出发遍历完所有顶点回到 1 的最小成本。
以下是参考代码:
阅读全文