You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求解固定起点且需遍历节点子集的图最短路径及TSP目标节点

带起点约束的TSP目标节点求解伪代码

问题本质

你要解决的是固定起点的旅行商问题变种:从指定起点出发,遍历给定节点子集的所有节点后,找到对应最小代价路径的终点(即你需要的目标NodeId)。以下是基于动态规划的伪代码实现,这是处理小规模TSP问题的高效方案。

核心思路

使用状态压缩动态规划,用二进制掩码标记已访问的节点,记录每个状态下的最小路径代价,最终在遍历完所有节点的状态中找到代价最小的终点。

伪代码实现

// 输入参数
start_node: NodeId          // 指定的起点节点ID
node_subset: List[NodeId]   // 必须遍历的节点子集(需包含start_node,若不包含请先手动加入)
cost_matrix: Dict[NodeId, Dict[NodeId, Number]]  // 节点间路径代价,cost_matrix[a][b]表示a到b的代价,不可达设为无穷大

// 预处理:将NodeId映射为连续索引,方便二进制掩码操作
node_list = list(node_subset)
node_to_idx = {node: idx for idx, node in enumerate(node_list)}
n = len(node_list)
start_idx = node_to_idx[start_node]

// 初始化DP表:dp[mask][idx] = 最小代价,mask是二进制掩码,idx是节点在node_list中的索引
INF = 无穷大
dp = 二维数组,大小为(2^n) x n,所有值初始化为INF
dp[1 << start_idx][start_idx] = 0  // 初始状态:仅访问起点,代价为0

// 遍历所有可能的节点访问状态(掩码)
for mask in 0 ... (2^n - 1):
    // 遍历当前状态下的所有可能节点
    for u_idx in 0 ... n-1:
        // 如果当前状态下u节点已被访问,且代价不是无穷大
        if (mask & (1 << u_idx)) != 0 and dp[mask][u_idx] != INF:
            u_id = node_list[u_idx]
            // 遍历所有未被访问的节点v
            for v_idx in 0 ... n-1:
                if (mask & (1 << v_idx)) == 0:
                    v_id = node_list[v_idx]
                    new_mask = mask | (1 << v_idx)
                    // 更新新状态的最小代价
                    if dp[new_mask][v_idx] > dp[mask][u_idx] + cost_matrix[u_id][v_id]:
                        dp[new_mask][v_idx] = dp[mask][u_idx] + cost_matrix[u_id][v_id]

// 找到遍历完所有节点后,代价最小的终点
full_mask = (1 << n) - 1
min_cost = INF
target_node = None
for v_idx in 0 ... n-1:
    if dp[full_mask][v_idx] < min_cost:
        min_cost = dp[full_mask][v_idx]
        target_node = node_list[v_idx]

// 返回目标节点ID
return target_node

补充说明

  • 如果node_subset不包含起点,需要先执行node_subset.append(start_node)(或去重后加入),确保起点在遍历集合内。
  • 若存在多个终点对应相同的最小代价,伪代码会返回第一个遇到的节点,若需要特定规则(如节点ID最小),可在最后一步的判断中补充条件。
  • 该方案的时间复杂度为O(n²·2ⁿ),适合节点子集规模n≤20的场景;若n更大,建议使用启发式算法(如遗传算法、模拟退火)优化。

内容的提问来源于stack exchange,提问作者Joan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 19:00:30