Skip to content

Commit 0716a8c

Browse files
authored
Merge pull request #633 from Datasyncml/main
Added TSP (Travelling Salesman Problem) solution using Dynamic Programming in C++
2 parents 31633de + 12a4f09 commit 0716a8c

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

CPP/tsp.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
4+
const int INF = 1e9;
5+
6+
int tsp(int mask, int pos, vector<vector<int>> &dist, vector<vector<int>> &dp, int n) {
7+
if (mask == (1 << n) - 1)
8+
return dist[pos][0]; // return to start
9+
if (dp[mask][pos] != -1)
10+
return dp[mask][pos];
11+
12+
int ans = INF;
13+
for (int city = 0; city < n; city++) {
14+
if (!(mask & (1 << city))) {
15+
int newCost = dist[pos][city] + tsp(mask | (1 << city), city, dist, dp, n);
16+
ans = min(ans, newCost);
17+
}
18+
}
19+
return dp[mask][pos] = ans;
20+
}
21+
22+
int main() {
23+
int n = 4;
24+
vector<vector<int>> dist = {
25+
{0, 20, 42, 35},
26+
{20, 0, 30, 34},
27+
{42, 30, 0, 12},
28+
{35, 34, 12, 0}
29+
};
30+
31+
vector<vector<int>> dp(1 << n, vector<int>(n, -1));
32+
cout << "Minimum TSP cost: " << tsp(1, 0, dist, dp, n) << endl;
33+
return 0;
34+
}

0 commit comments

Comments
 (0)