首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

最短哈密爾頓回路(TSP)動態規劃算法原理與 C++ 實現

     編輯:程式設計綜合問答

問題定義

給定 n 個城市及任意兩城市間距離,求訪問每個城市恰好一次並返回起點的最短路徑長度。

Held-Karp 動態規劃 (O(n²2ⁿ))

狀態定義

dp[mask][i]:已訪問城市集合為 mask (bitmask),當前位於城市 i 的最短路徑長度。
mask 第 j 位為 1 表示城市 j 已訪問。

轉移方程

dp[mask | (1<

初始化

dp[1< (從 start 出發)。

答案

min(dp[(1< 其中 i ≠ start。

C++ 實現 (n ≤ 20)

#include <bits/stdc++.h>
using namespace std;
const double INF = 1e18;

double tsp(vector>& dist) {
    int n = dist.size();
    int ALL = 1 << n;
    vector> dp(ALL, vector(n, INF));
    dp[1][0] = 0; // 從城市 0 出發
    
    for (int mask = 1; mask < ALL; ++mask) {
        for (int u = 0; u < n; ++u) if (dp[mask][u] < INF) {
            for (int v = 0; v < n; ++v) if (!(mask & (1<

大規模近似算法

  • 2-近似:MST 雙邊遍歷 (Christofides 算法 1.5-近似)。
  • 啟發式:最近鄰、模擬退火、蟻群、遺傳算法。
  • 精確求解器:Concorde TSP Solver (分支定界 + 割平面)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved