Bitmask DP
// dp[mask][v] = shortest path visiting waypoints in mask, ending at v
for (int mask = 0; mask < (1 << K); mask++)
for (int i = 0; i < K; i++) {
if ((mask & (1 << i)) == 0) continue;
for (int j = 0; j < K; j++) {
if (i == j || (mask & (1 << j)) == 0) continue;
dp[mask][i] = min(dp[mask][i], dp[mask ^ (1<Advertisement
Preprocessing
Compute all-pairs distances among {src, waypoints, tgt}. Dijkstra × (K+2). Not full graph.
Advertisement
Complexity
Preprocessing: O((K+2) × (V+E) log V). DP: O(2^K × K²). Feasible for K ≤ 20.
Ordered waypoints
Must visit in given order: linear DP. O(K × (V+E)).