Bellman–Held–Karp算法求解包含限制的TSP问题
创始人
2024-11-29 00:00:51
0
  1. 定义问题:给定一个有n个点的加权有向图,其中某些点被标记为必须经过的点,要求从任意一个点出发,经过所有标记点并回到起点的最短路径。
  2. 构造子问题:将所有标记点划分为两组,记为A和B。从起点s出发,经过A中的所有点,最终到达B中的某个点t。子问题的解为:从s出发,经过A中的所有点,到达p,然后从p出发,经过B中的所有点,最终到达t的最短路径。
  3. 使用动态规划求解:设dp[S, i]表示从起点s出发,经过集合S中的点、最后一个访问的点为i的最短路径长度。状态转移方程为:

dp[S, i] = min(dp[S{i}, j] + dis(j, i)), 其中j∈S{i}

其中dis(j, i)表示从点j到i的距离,如果(i, j)不在图中,则dis(j, i)=∞。 4. 初始化:dp[∅, s] = 0。 5. 求解原问题:对于所有的标记点组合,使用该算法求解,并选择最小的路径作为最终解。时间复杂度为O(n22n)。

代码示例:

int n, m; int g[N][N]; // 存图 int f[1 << N][N]; // f[S][i]表示经过的点集为S,以i为终止点的最短路 int A[N], B[N], cnt; // A, B分别表示两个必经点集合,cnt记录选中的点数量 int d[N][N]; // d[i][j]表示i到j的距离 int main() { cin >> n >> m; memset(g, 0x3f, sizeof g); for (int i = 0; i < m; i++) { int a, b, w; cin >> a >> b >> w; g[a][b] = min(g[a][b], w); } int x; cin >> x; while (x--) { int a

相关内容

热门资讯

线上(wepoke真的)原来是... 线上(wepoke真的)原来是真的有挂!其实真的有挂(2022已更新)(哔哩哔哩);亲,其实确实真的...
两教程(Wepoke程序)软件... 两教程(Wepoke程序)软件透明挂辅助工具(软件透明挂)透视辅助(2024已更新)(哔哩哔哩);致...
软件(wepoke透明)原来是... 软件(wepoke透明)原来是真的有挂!其实真的有挂(2020已更新)(哔哩哔哩)是一款可以让一直输...
一模拟器(德扑工具)外挂辅助工... 一模拟器(德扑工具)外挂辅助工具(透视)透视辅助(2025已更新)(哔哩哔哩);亲真的是有正版授权,...
系统(aapoker讲解)竟然... 系统(aapoker讲解)竟然真的有挂!其实真的有挂(2021已更新)(哔哩哔哩);aapoker讲...
6系统(aapoker下载)外... 6系统(aapoker下载)外挂辅助工具(辅助挂)透视辅助(2023已更新)(哔哩哔哩)aapoke...
智能(德扑之星刷数据)果真真的... 智能(德扑之星刷数据)果真真的有挂!原来真的有挂(2025已更新)(哔哩哔哩);《WPK辅助透视》‌...
1机器人(德州nzt软件)软件... 1机器人(德州nzt软件)软件透明挂辅助软件(透视)透视辅助(2022已更新)(哔哩哔哩);人气非常...
ai代打(德扑之星决策)确实是... ai代打(德扑之星决策)确实是真的有挂!原来真的有挂(2020已更新)(哔哩哔哩);科技详细教程小薇...
第8透明(wepoke数据)外... 第8透明(wepoke数据)外挂透明挂辅助神器(辅助挂)透视辅助(2023已更新)(哔哩哔哩);原来...